{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Wasserstein GAN\n",
    "\n",
    "Brief introduction to Wasserstein GAN or WGANs. This notebook is organized as follows:\n",
    "\n",
    "1. **Research Paper**\n",
    "* **Background**\n",
    "* **Definition**\n",
    "* **Training WGAN with MNIST dataset, Keras and TensorFlow**\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Research Paper\n",
    "\n",
    "* [Wasserstein GAN](https://arxiv.org/pdf/1701.07875.pdf)\n",
    "\n",
    "## 2. Background\n",
    "\n",
    "Brief definition of some concepts, such as Wasserstein distance.\n",
    "\n",
    "### Wasserstein distance\n",
    "\n",
    "The Wasserstein distance is the cost of the cheapest transport plan or the minimum cost of transporting mass in converting the data distribution $q$ to the data distribution $p$. \n",
    "\n",
    "### GANs\n",
    "\n",
    "**Generative adversarial nets** consists of two models: a generative model $G$ that captures the data distribution, and a discriminative model $D$ that estimates the probability that a sample came from the training data rather than $G$.\n",
    "\n",
    "The generator distribution $p_g$ over data data $x$, the generator builds a mapping function from a prior noise distribution $p_z(z)$ to data space as $G(z;\\theta_g)$.\n",
    "\n",
    "The discriminator, $D(x;\\theta_d)$, outputs a single scalar representing the probability that $x$ came form training data rather than $p_g$.\n",
    "\n",
    "The **value function** $V(G,D)$:\n",
    "\n",
    "$$ \\underset{G}{min} \\: \\underset{D}{max} \\; V_{GAN}(D,G) = \\mathbb{E}_{x\\sim p_{data}(x)}[log D(x)] + \\mathbb{E}_{z\\sim p_{z}(z)}[log(1 - D(G(z)))]$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Definition\n",
    "\n",
    "Wasserstein GAN (WGAN) proposes a new cost function using Wasserstein distance that has a smoother gradient everywhere. This model is proposed to measure the difference between the data distributions of real and generated images.\n",
    "\n",
    "This network is very similar to the discriminator **$D$**, just without the sigmoid function and outputs a scalar score rather than a probability.\n",
    "\n",
    "The discriminator **$D$** is rename to **Critic** to reflect its new role. \n",
    "\n",
    "### Network Design\n",
    "\n",
    "<img src=\"../../img/network_design_dcgan.png\" width=\"600\"> \n",
    "\n",
    "\n",
    "### Cost Funcion\n",
    "\n",
    "| Model | Discriminator/Critic | Generator             |\n",
    "|:-----:|:--------------------:|:---------------------:|\n",
    "| **GAN**   |  $$ \\nabla_{\\theta_{d}}\\frac{1}{m}\\sum_{i=1}^{m} [log(D(x^{(i)})) + log(1-D(G(z^{(i)})))]$$ | $$ \\nabla_{\\theta_{g}}\\frac{1}{m}\\sum_{i=1}^{m} -log(D(G(z^{(i)})))$$|\n",
    "| **WGAN**  |$$ \\nabla_{w}\\frac{1}{m}\\sum_{i=1}^{m} [f(x^{(i)}) - f(G(z^{(i)}))]$$ | $$ \\nabla_{\\theta_{g}}\\frac{1}{m}\\sum_{i=1}^{m} -f(G(z^{(i)}))$$|\n",
    "\n",
    "* **Wasserstein objective:**\n",
    "\n",
    "```\n",
    "def wasserstein_loss(y_true, y_pred):\n",
    "    return K.mean(y_true * y_pred)\n",
    "```    \n",
    "* **Critic training:**\n",
    "\n",
    "1. Maximize $\\frac{1}{m}\\sum_{i=1}^{m} f(x^{(i)})$\n",
    "* Minimize $\\frac{1}{m}\\sum_{i=1}^{m} f(G(z^{(i)}))$\n",
    "* Weight clipping:\n",
    "\n",
    "```\n",
    "for l in critic.layers:\n",
    "    weights = l.get_weights()\n",
    "    weights = [np.clip(w, -clip_value, clip_value) for w in weights]\n",
    "    l.set_weights(weights)\n",
    "```\n",
    "\n",
    "* **Generator training:**\n",
    "\n",
    "1. Maximize $\\frac{1}{m}\\sum_{i=1}^{m} f(G(z^{(i)}))$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Training WGANs with MNIST dataset,  Keras and TensorFlow\n",
    "\n",
    "* **Data**\n",
    "    * Rescale the MNIST images to be between -1 and 1.\n",
    "    \n",
    "* **Generator**\n",
    "    * Use the **inverse of convolution**, called transposed convolution.\n",
    "    * **ReLU activation** and **BatchNormalization**.\n",
    "    * The input to the generator is the **normal distribution** $z$ or latent sample (100 values).\n",
    "    * The last activation is **tanh**.\n",
    "    \n",
    "* **Discriminator**\n",
    "    * **Convolutional neural network**  and **LeakyReLU activation**.\n",
    "    * **No activation** in the last layer\n",
    "    \n",
    "* **Loss**\n",
    "    * wasserstein_loss\n",
    "\n",
    "* **Optimizer**\n",
    "    * RMSprop(lr=0.00005)\n",
    "\n",
    "* batch_size = 64\n",
    "* epochs = 100\n",
    "\n",
    "### 1. Load data\n",
    "\n",
    "#### Load libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T15:10:42.271347Z",
     "start_time": "2018-09-20T15:10:41.913247Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T15:10:43.693894Z",
     "start_time": "2018-09-20T15:10:42.273300Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "from keras.datasets import mnist\n",
    "from keras.models import Sequential, Model\n",
    "from keras.layers import Input, Dense, ReLU, LeakyReLU, BatchNormalization\n",
    "from keras.layers import Conv2D, Conv2DTranspose, Reshape, Flatten\n",
    "from keras.optimizers import RMSprop\n",
    "from keras import initializers\n",
    "from keras import backend as K"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Getting the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T15:10:44.274596Z",
     "start_time": "2018-09-20T15:10:43.696072Z"
    }
   },
   "outputs": [],
   "source": [
    "# load dataset\n",
    "(X_train, y_train), (X_test, y_test) = mnist.load_data()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Explore visual data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T15:10:44.727489Z",
     "start_time": "2018-09-20T15:10:44.276602Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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Z86cCeSelMJW0zbbbAPkj0W14ImqVTjiiCMAOPPMM4HCT7HFtMLr1VprrQXkyglg2223BWDjjTee7+tWXXXV9PjEE08sT+Yi07lzZyD33dp///3Tc94qX2211YD871ux37MePXoAcMstt6Rpf/zjHwGYMWNGkbmuLG9B+t+vhx9+uJrZSW211VYAvPbaaxV5P7WgREQkSqqgREQkSlF28S211FLp8RZbbAHA4MGDgfwukUI+/PBDAAYMGADA/fffn54bM2YMkBvwB7jssstKkOP6teaaawKw5JJLVjkn8dhwww3TY+8yOvjggwFo27Ztes4sMwb82WefpWneBb3RRhsBcMABB6TnfELA+++/X45sR8N/57p161aR9/OlJwB33HEHkPtbECufeLTeeusB1e3i825XgLXXXhvI/V2A3Pe8LO9dtjuLiIi0QJQtqFtvvTU97tOnT1Gv9RaXT+0Npz37U8kmm2zSwhzWt65du6bHffv2zTsXPt13794dgP/85z+VyViV+GScK664AoDevXun53wqeSHemt99993TNJ9G7eW44oorpufC43r23HPPAYVbUP/973+BXEsnfHovNEFnu+22A3JTneuFt/r+8Y9/VDkn+b1WRx99NJDr0YLytvjVghIRkSipghIRkShF1cXnsfV8tT00HoALu+wee+wxAK688so07csvvwTgzTffBGDq1KnpuZ133rngPSVj++23B+DOO+9M07x7yw0cODA9njhxYmUyVmU9e/YE4He/+91Cr/3444/T41133RXInySx7rrrljh3tefmm28G4JFHHml0bu7cuQBMmjSpSffyKDJvv/02kFs/FQrf5/XXXy8us1USdm1W2+23394ozbuvyy2eUhAREQlE0YLy+Ho+eBrG1vPV40899RSQP2nCB0bDaeNe23/99dcAjBs3Lj3ng6xhC80nVSjSORx++OFA4afQkSNHArko8a1JGOmgoQkTJgC5lfVhJImw5eR8enlrNm/ePKBw+RTLJ6Asv/zy873m888/T49LHO+wpMLJWx07dqxiTvI17EWB3N/qclMLSkREolS1FlQYwfj0008HcjX15MmT03NfffUVAHfffTcAs2bNSs898cQTef82VbiY8tRTTwVyCy1bm3Bq829/+1sgfzrvtGnTALj44osrm7GI+NTaY445BoBnn302PffRRx8BuenRCxPTk3GtCqOT+/+b8He6oX79+pU9T6UQTrtf0OepFP+u+uLc0BdffFGRPKgFJSIiUVIFJSIiUap4F98SSywB5E8N96atxykLY2f5tNByNXnXWGONstw3dr49RLh9SSGDBg0C4IUXXih3lqLlSxf69+/f4nv5FhzSNGHX+1lnnQXkT9X3yByFvPXWW0Bu6nrsNthgg0Zp77zzThVykuF/o8Nu6Q8++ADI/a0uN7WgREQkShVvQW2++eZA4Thce++9N9D8bcOl6fbYYw+gcFzCv//97+nxddddV7E81TLfbHDppZde4HU///nP8/775ZdfTo9jiLtWCd56P/TQQ4H82I8N+eJxWPCGhb4BobeyAJ588kkA5syZ0+y8Vlu5Nwb0JT3+9wDgkEMOAWC33XZrdP1FF10E5CZPlZtaUCIiEqWKt6CuvvpqID/ckLeYyt1y8vAhhaIitxb77LMPAJdffnmjcy+99BKQW7ALMH369MpkrAb4PmWdOnVK0/70pz8BhXsEFvR983GtI488Mk374YcfSpfZyITb3j/66KNAacd/R48eDcBtt91WsnvGoEOHDk26btNNNwVyf1fDVunqq68OwOKLLw7kj+v5dzRsZb766qtAblHzoovmqomxY8cW9wFaSC0oERGJkiooERGJUkW6+HxjO8jF3QsHPL3JX27e1RK+t09FrWc+KA0Lnlb+ySefAPW/AWFThNOXfWKPl124gZt3jXiXXTjRwQeevWsw5N0m++67b5rmE1K+//77ln+AiHk3VFN2FVjYhoXO/8bsueeeaZrH76wVYTeb/4265ZZbADjnnHMW+Fqf7ORl6vEOAb755hsA3n33XQD+8pe/pOd8GU84vOK//x7DMFziU87NCQtRC0pERKJUkRZUWAP7QF0Yu+yBBx4o+Xv6guBCiytHjBiRHp999tklf+/YhBG2F/QUWmjiRGvj389w2u2wYcPyrrngggvSY/8ujRkzBsgf1PZz4QQBt9JKKwFw2WWXpWmffvopkL9/UczRt4vh+zUB7LTTTkBuOvMzzzyTnvv2228Xeq+jjjoqPe7bt2+Jclh9xx9/fHrse635lvYL0/C7895776XnXnnllaLy4TEn/TvqPSvVoBaUiIhESRWUiIhEqWrbbYRdF76lRil4155vYuhbeUBu0O+qq65K08LtO+qNT0gptCLcDR8+PD0eP3582fMUo3BChHffhd8b54PuHp8QcivqvTvEoxdALmpEOOlhwIABQK7bz6OnAAwZMgSA559/Pk274oorAJg6dWqj/NTqBB/vvrrkkkua9fqw276euvhC/v+9GnbZZZe8/15YvM5yUgtKRESiVLUWVCmnlntLAXJPvr179wbyWwi9evUq2XvWAt9Yr9B22D5wesQRR1QyS1Fp06YNkIsvBnDaaacBMHv27DTN47vdf//9QH4csi5dugBwww03ALkp6QAffvghAMcdd1ya5lHhPQZaOAjuK/x79OiRpjXcWjvcJr3QRnKtgW/zLpXx8MMPV+291YISEZEoVaQFFS7I82OPCQdw0kknNeu+J598MgDnn39+mubbxnt/fri3VGuzwgorAIWnlt90001AfY/BLYxPp/VWE+QWNR577LFpmrdEt9lmGyA/fp4vDPWlFBdeeGF67s477wTyWz3Oo28//fTTaZof9+nTJ0076KCD8l7n3/mYhWN6Pv4ZLu1obnRxL3dF2G891IISEZEoqYISEZEoVaSLL4x958errLJKmnb99dcDuRhRU6ZMSc95t4pvbuZh5SEXRt5XUUNuVbp3YbVG3rUUxjFrKNwor7Xq169fozSfOBFOM/dpzeFW4w35NWFkiOZunzF06NCCx7HzzQXPPffcNG3XXXcF8id0FOrybMgjcoTbmPhWPYViG3q3YVMiUUjT+HDM+uuvn6YVG5WipdSCEhGRKFVtmrk/qUIuBpVPA/cBZID11ltvvvfwVoBP3YXCT8WtQTjV3jcr88kR4ULRG2+8EVDEcoBJkyYBuUW2kFvoHbbUnS/CffHFF9M0j302YcIEoL43HVwYn2pfKPbgGWeckR7PnDlzoffyltcWW2yRphXa8n3kyJEA3HzzzUD+3wJpGS/vBfXElJtaUCIiEiVVUCIiEqWKdPGFm7i99tprAGy11VaNrvOJEx07dmx0zidO+Gp+aP76qXq03HLLpcfhBBSAL774Ij0O1/y0djvssAOQvybPu5TC7WB88o7Hw6v3DQXLIYym0Vz+/+Sxxx5L0/xvgCZHlM+2226bHt91110VfW+1oEREJEoVaUF5FHHIbXEdrtT3yOOF+KpxHwT96KOPypFFaYV8sP7ee+9N08JjKY7HdQwjjB9++OFF3ePjjz8GchE9Ro8enZ677bbbgPzND6V8wghA1aIWlIiIRKni08x976dwT5dC27JLcd5///302Kff+8JJkUrw/anCrcv/+c9/AnDxxRenaR5d36fohxHbffcBXwIglef7nu2///5VzolaUCIiEilVUCIiEiUrtDp7vhebNf3iOpckSYtHEFWeOSrPkhubJEmXltxA5ZmnxeUJKtNQU37n1YISEZEoqYISEZEoqYISEZEoqYISEZEoqYISEZEoqYISEZEoFRtJYjIwsRwZqTFrlug+Ks8MlWfplaJMVZ45+o6WVpPKs6h1UCIiIpWiLj4REYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYmSKigREYlSVSsoM+tvZoOrmYd6ovIsPZVpaak8S6vey7PsFZSZHWRmr5vZLDP7ysyeMrPty/2+88nLBDObk83LLDN7thr5aImYyjObn5PM7N9mNtvM3jOz9auVl+aKpUzNbI3gu+k/iZmdWum8tEQs5ZnNy2ZmNtrMppvZ52bWrxr5aInIynM7M/unmc00s/8rdz7KWkGZ2SnAtcClQEdgDeAmYO9yvu9C/CZJknbZn92qmI+ixVaeZvY74ChgL6Ad0B2YXI28NFdMZZokyafBd7Md8HPgR+ChSueluWIqz6z7gBeBDsCOwHFm1qNKeSlaTOVpZh2AR4GBwHLAAOAxM1u+bG+aJElZfoBlgVnA/gu4pj8wOPjvvwGTgOlkvlSdg3PdgHeBmcAXwGnZ9BWBx4FpwP+A0cAi83m/CUDXcn3mcv7EVp5kHm4+A3apdtnUS5kWeO8/AS9Uu5xquTyBb4BODd7v7GqXVS2WJ5kH0HcapH0AHFWuMihnC2pbYEng4SJe8xSwHrAy8AYwJDh3B3BskiTLABsDI7LppwKfAyuRecI4B0gW8B5DzOxrM3vWzDYtIm/VFlt5rp792djMPst2811gZrU08Sa2Mm3oMODuIvJWbTGW57XAYWa2mJltkM3j80Xkr5piK0/L/jRM27iI/BWlnH9MVgAmJ0kyr6kvSJLkL0mSzEyS5DsyTwabmtmy2dNzgU5m1j5JkqlJkrwRpK8KrJkkydwkSUYn2aq9gIOBtYA1gReAZ8xsuaI/WXXEVp6rZ//djUxX1K+BPmS6/GpFbGWaMrNfkflj8WCRn6maYizPx4H9gDnA+8AdSZK8VvxHq4rYyvNlYDUz65Ot8A8HfgYs1czPt1DlrKCmACua2aJNudjM2pjZ5Wb2sZnNINMdB5nmJ0AvMk3UiWY2ysy2zaYPBD4CnjWzT8zsrPm9R5IkY5IkmZMkyTdJklxGpkn7q+I/WlXEVp5zsv8OSJJkWpIkE4Bbs/esFbGVaehw4KEkSWY19cNEIKryzI6ZPA1cSKYl8lNgdzM7vhmfrRqiKs8kSaaQGfs6BfgPsAeZ1ujnxX+0JipX3yG5/tP9FnBNf7L9p8ChwHvA2mSajcuRaWau2+A1iwEnA58VuF9n4L80cVwk+349ylUG9VyeZJ6avgN2CNJOBR6udlnVapkG17QlM4awc7XLqJbLE+gCTG2Q9kfg8WqXVS2WZ4FrFwUmAruXqwzK1oJKkmQ60A+40cz2MbOlss3CPc1sQIGXLEPmD94UMn/8LvUTZra4mR1sZssmSTIXmAH8kD3X3czWNTML0n9oeHPLTOH9ZfZeS5rZ6WSeLMaU9pOXR2zlmSTJN8ADwBlmtoyZrQ4cTaZLpSbEVqaBnmRa9y+U4GNWTITl+UHmcjvIzBYxs1WA3sC40n3q8omwPDGzzbN5aA9cCXyeJMkzpfvUDVTgKeBg4HVgNpnZJU8A2xWo/dsBw8nMMJlIZoA4AdYFFifTVJ9KpgBfA7bPvu5kMk3Z2WSamufPJx+dgf/LXjcF+DvQpdpPSbVantlr2wP3Z9/jMzK/TFbtMqrlMs1e/wxwUbXLpR7KE9g5+9rp2bz8GViq2mVUw+U5NFuW08k8oK5czs9u2TcVERGJSi1NCRYRkVZEFZSIiERJFZSIiERJFZSIiERJFZSIiESpSSuUnZlpyl9WkiQNY1IVTeWZo/IsuclJkqzUkhuoPPO0uDxBZRpqyu+8WlAi9WlitTNQZ1SeVaAKSkREoqQKSkREolTUGJS0Duuvn9u1/emnnwagTZs2AKy55ppVyZOItD5qQYmISJTUgpLUoEGDAOjdu3ea1qFDBwAef7xmgpSLSJ1QC0pERKKkCkpERKKkLr5WqmPHjgAMGzYsTdtmm20ACLdgefvttwE46qijKpg7ERG1oEREJFLRt6B8evOyyy4732tOOOGE9HippZYCYIMNNgDgD3/4Q3ruyiuvBKBPnz5p2rfffgvA5ZdfDsAFF1xQimxHy6eQe1n84he/aHTN2WefnR6//vrrAEyZMqUCuRNpmaWXXjo9HjlyJACrrbZamvbLX/4SgAkTJlQyW9JMakGJiEiUqtaCWmONNdLjxRdfHIDtttsOgO233z49t9xyywHQq1evou7/+eefA3D99denaT179gRg5syZadq4ceMAGDVqVFH3r1U+bbxbt27zvcbLDuCFF14oe55EmsJbQiut1Dhm69SpUwH49a9/naZtueWWAIwfPz5NU09AbVELSkREoqQKSkREolTxLr7NNtsMgBEjRqRpC5oAUawff/wRgPPOOw+AWbNmpeeGDBkCwFdffZWmeddA2A1Qb8LYevfddx8AZo23Ytl3330BGD58eGUyVudOPfVUINeFDbDRRhsBcPDBBze6/v333wegc+fOFchdPDbeeOP0+MQTTwQKx3z073E4POB8klOnTp3SNP+Of/HFF2la+P+itfCJUIcccggAO+64Y3qu0HfttNNOA+DLL78E8odcBg8eDMCrr75answ2oBaUiIhEqeItqE8//RTIH6wspgUV1tzTpk0D8gdGv//+ewDuvffeFuWznhx66KHpsT99PvnkkwD8/ve/T8+FT5rSNP406q2A8OnUJ+UUaq2Gi6HdeuutB8C7776bpoUtgnq18847p8cLWhD+3XffAbmn+PC1Z511VqPrvYzvuuuuNK21TJII42led911AKy44opA/vfRp+KHE08GDhyYd6/wer/uwAMPLG2G50MtKBERiZIqKBERiVLFu/j+97//AXD66aenad27dwfgzTffBPLXLrm33noLgF133TVNmz17NpA/0HfSSSeVOMe16+WXXwZyE1Mgt4L+5JNPBtStNz+rrrpqejx06FAA1llnnUbXefe0RzAIu0PGjh0LwBZbbNGk91xkkUXy7lXv+vfvD+T/LXB33303AF9//XWa5tFPwjT/bj/zzDNArhsrvO7BBx8sYa7jtOiimT/lXbp0AeDPf/5zes6j67z44osAXHTRRem5l156CYAlllgiTfvrX/8KwG677dbofTyyTKWoBSUiIlGqWiSJRx55JD32Kece4WHTTTdNz/mgqT89easp9M4776THxxxzTOkzW2P23ntvIDe9NByQ/9vf/gbkYhBKvq5duwL5T6A//elPm/z6cFLD5MmTgfyneo+GcOeddwKw+uqrN7pHOEminnlLsW3btmnaxIkTATj33HOB/CUhbt11102PzznnHCA3eB/+ffAWWmv4rvsU8ttvv73Rueeeew7ITZyYMWNGo2vCSRUNW05hZBlv2VaKWlAiIhKlKKKZN6zRp0+f3uiao48+GoAHHnggTfNFuZKLWQjwq1/9ar7X+cLk8KloQXxMr1Arwhf01ZMzzjgDWHCryac7A5x55pkAvPLKK0DhBd/h1GYvz0ItJx8fDJcF1DMfG9pjjz3SNG+B+sLb448/Pj3n431XX311mrbXXnsBubHtSy65JD138803lyPb0QjHkrwl6b0lN910U3rOgxYUajk5b7EW4ounIX/8rxLUghIRkSipghIRkShF0cXXkA9uQi5kvq/Q90FsgGeffbai+YrZDz/8kB57mfm05bAr1KeaFuJTz0N9+/YFCsdG81hzYXdVLU5bDweFfdv7QjwKStgFN2bMmKLeq1DXnvMYiD65ot750hHvHoVcF59HiAiXlVxzzTVA4Vh8vtHooEGDypPZiPTr1w/IdetBLoKOT7f3rmeAOXPm5L1+ySWXTI/9ux+WqS+VuPjii4HqxuZUC0pERKIUZQsqnCrqkyPeeOMNIH/6r2+mFy4eu/HGG4HCsc7qWRgDzidJeMvJn/yh8dN5uIjXX9ejR49G9/f/J+Hkig022ADIXwjpMbp8unAt8JYg5BY1hnzBsz+lN7XVtPzyywP5kwB22GGHgveGXHzE1sInmxQavPfp+A899FCa5k/24e/2HXfcAeQvW6lH4SQonzgSloO3nPbZZ5/53sOn5/uuDpDrbQn57/OAAQNakOPSUAtKRESiFGULKvTxxx8DcMQRRwC5BY6QGwsIxwR88d8999wDFF7oV0+WWWYZANZee+1G53w/lzCy+0cffQTk9tYJw8z4At+wleXjfFdddRWQH3neF1iXcj+varjtttvSY19UGy51OOiggwCYNGlSUff1SPHhdGDni8sPOOCA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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "for i in range(10):\n",
    "    plt.subplot(2, 5, i+1)\n",
    "    x_y = X_train[y_train == i]\n",
    "    plt.imshow(x_y[0], cmap='gray', interpolation='none')\n",
    "    plt.title(\"Class %d\" % (i))\n",
    "    plt.xticks([])\n",
    "    plt.yticks([])\n",
    "    \n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Reshaping and normalizing the inputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T15:10:45.134535Z",
     "start_time": "2018-09-20T15:10:44.729400Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_train.shape (60000, 28, 28)\n",
      "X_train reshape: (60000, 28, 28, 1)\n"
     ]
    }
   ],
   "source": [
    "print('X_train.shape', X_train.shape)\n",
    "\n",
    "if K.image_data_format() == 'channels_first':\n",
    "    X_train = X_train.reshape(X_train.shape[0], 1, 28, 28)\n",
    "    X_test = X_test.reshape(X_test.shape[0], 1, 28, 28)\n",
    "    input_shape = (1, 28, 28)\n",
    "else:\n",
    "    X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)\n",
    "    X_test = X_test.reshape(X_test.shape[0], 28, 28, 1)\n",
    "    input_shape = (28, 28, 1)\n",
    "\n",
    "# the generator is using tanh activation, for which we need to preprocess \n",
    "# the image data into the range between -1 and 1.\n",
    "\n",
    "X_train = np.float32(X_train)\n",
    "X_train = (X_train / 255 - 0.5) * 2\n",
    "X_train = np.clip(X_train, -1, 1)\n",
    "\n",
    "print('X_train reshape:', X_train.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Define model\n",
    "\n",
    "#### Generator\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T15:10:45.820939Z",
     "start_time": "2018-09-20T15:10:45.137046Z"
    }
   },
   "outputs": [],
   "source": [
    "# latent space dimension\n",
    "latent_dim = 100\n",
    "\n",
    "# imagem dimension 28x28x1\n",
    "img_dim = 784\n",
    "\n",
    "init = initializers.RandomNormal(stddev=0.02)\n",
    "\n",
    "# Generator network\n",
    "generator = Sequential()\n",
    "\n",
    "# FC\n",
    "generator.add(Dense(7*7*512, input_shape=(latent_dim,), kernel_initializer=init))\n",
    "# generator.add(ReLU())\n",
    "generator.add(Reshape((7, 7, 512)))\n",
    "\n",
    "# # Conv 1\n",
    "generator.add(Conv2DTranspose(128, kernel_size=3, strides=2, padding='same'))\n",
    "generator.add(BatchNormalization(momentum=0.8))\n",
    "generator.add(ReLU(0.2))\n",
    "\n",
    "# Conv 2\n",
    "generator.add(Conv2DTranspose(64, kernel_size=3, strides=1, padding='same'))\n",
    "generator.add(BatchNormalization(momentum=0.8))\n",
    "generator.add(ReLU(0.2))\n",
    "\n",
    "# Output\n",
    "generator.add(Conv2DTranspose(1, kernel_size=3, strides=2, padding='same',\n",
    "                              activation='tanh'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Generator model visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T15:10:45.828219Z",
     "start_time": "2018-09-20T15:10:45.823003Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_1 (Dense)              (None, 25088)             2533888   \n",
      "_________________________________________________________________\n",
      "reshape_1 (Reshape)          (None, 7, 7, 512)         0         \n",
      "_________________________________________________________________\n",
      "conv2d_transpose_1 (Conv2DTr (None, 14, 14, 128)       589952    \n",
      "_________________________________________________________________\n",
      "batch_normalization_1 (Batch (None, 14, 14, 128)       512       \n",
      "_________________________________________________________________\n",
      "re_lu_1 (ReLU)               (None, 14, 14, 128)       0         \n",
      "_________________________________________________________________\n",
      "conv2d_transpose_2 (Conv2DTr (None, 14, 14, 64)        73792     \n",
      "_________________________________________________________________\n",
      "batch_normalization_2 (Batch (None, 14, 14, 64)        256       \n",
      "_________________________________________________________________\n",
      "re_lu_2 (ReLU)               (None, 14, 14, 64)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_transpose_3 (Conv2DTr (None, 28, 28, 1)         577       \n",
      "=================================================================\n",
      "Total params: 3,198,977\n",
      "Trainable params: 3,198,593\n",
      "Non-trainable params: 384\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# prints a summary representation of your model\n",
    "generator.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Critic\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T15:10:46.164750Z",
     "start_time": "2018-09-20T15:10:45.833448Z"
    }
   },
   "outputs": [],
   "source": [
    "# Critic network\n",
    "critic = Sequential()\n",
    "\n",
    "# imagem shape 28x28x1\n",
    "img_shape = X_train[0].shape\n",
    "\n",
    "# Conv 1\n",
    "critic.add(Conv2D(64, kernel_size=3, strides=2, padding='same',\n",
    "                  input_shape=(img_shape)))\n",
    "critic.add(LeakyReLU(0.2))\n",
    "\n",
    "# Conv 2\n",
    "critic.add(Conv2D(128, kernel_size=3, strides=2, padding='same'))\n",
    "critic.add(BatchNormalization(momentum=0.8))\n",
    "critic.add(LeakyReLU(0.2))\n",
    "\n",
    "# Conv 3\n",
    "critic.add(Conv2D(256, kernel_size=3, strides=2, padding='same'))\n",
    "critic.add(BatchNormalization(momentum=0.8))\n",
    "critic.add(LeakyReLU(0.2))\n",
    "\n",
    "# Conv 4\n",
    "critic.add(Conv2D(512, kernel_size=3, strides=1, padding='same'))\n",
    "critic.add(BatchNormalization(momentum=0.8))\n",
    "critic.add(LeakyReLU(0.2))\n",
    "\n",
    "# FC\n",
    "critic.add(Flatten())\n",
    "\n",
    "# Output\n",
    "critic.add(Dense(1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Critic model visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T15:10:46.176589Z",
     "start_time": "2018-09-20T15:10:46.167055Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "conv2d_1 (Conv2D)            (None, 14, 14, 64)        640       \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_1 (LeakyReLU)    (None, 14, 14, 64)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_2 (Conv2D)            (None, 7, 7, 128)         73856     \n",
      "_________________________________________________________________\n",
      "batch_normalization_3 (Batch (None, 7, 7, 128)         512       \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_2 (LeakyReLU)    (None, 7, 7, 128)         0         \n",
      "_________________________________________________________________\n",
      "conv2d_3 (Conv2D)            (None, 4, 4, 256)         295168    \n",
      "_________________________________________________________________\n",
      "batch_normalization_4 (Batch (None, 4, 4, 256)         1024      \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_3 (LeakyReLU)    (None, 4, 4, 256)         0         \n",
      "_________________________________________________________________\n",
      "conv2d_4 (Conv2D)            (None, 4, 4, 512)         1180160   \n",
      "_________________________________________________________________\n",
      "batch_normalization_5 (Batch (None, 4, 4, 512)         2048      \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_4 (LeakyReLU)    (None, 4, 4, 512)         0         \n",
      "_________________________________________________________________\n",
      "flatten_1 (Flatten)          (None, 8192)              0         \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 1)                 8193      \n",
      "=================================================================\n",
      "Total params: 1,561,601\n",
      "Trainable params: 1,559,809\n",
      "Non-trainable params: 1,792\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# prints a summary representation of your model\n",
    "critic.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. Compile model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Compile discriminator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T15:10:46.181782Z",
     "start_time": "2018-09-20T15:10:46.179108Z"
    }
   },
   "outputs": [],
   "source": [
    "# Wasserstein objective\n",
    "def wasserstein_loss(y_true, y_pred):\n",
    "    return K.mean(y_true * y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T15:10:46.210420Z",
     "start_time": "2018-09-20T15:10:46.183768Z"
    }
   },
   "outputs": [],
   "source": [
    "# Following parameter and optimizer set as recommended in paper\n",
    "n_critic = 5\n",
    "clip_value = 0.01\n",
    "optimizer = RMSprop(lr=0.00005)\n",
    "\n",
    "critic.compile(optimizer=optimizer, loss=wasserstein_loss, metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Combined network\n",
    "\n",
    "We connect the generator and the critic to make a WGAN."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T15:10:46.645592Z",
     "start_time": "2018-09-20T15:10:46.212359Z"
    }
   },
   "outputs": [],
   "source": [
    "critic.trainable = False\n",
    "\n",
    "# The generator takes noise as input and generated imgs\n",
    "z = Input(shape=(latent_dim,))\n",
    "img = generator(z)\n",
    "\n",
    "# The critic takes generated images as input and determines validity\n",
    "valid = critic(img)\n",
    "\n",
    "# The combined model (critic and generative)\n",
    "c_g = Model(inputs=z, outputs=valid, name='wgan')\n",
    "\n",
    "c_g.compile(optimizer=optimizer, loss=wasserstein_loss, metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### GAN model vizualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-20T15:10:46.652070Z",
     "start_time": "2018-09-20T15:10:46.647622Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input_1 (InputLayer)         (None, 100)               0         \n",
      "_________________________________________________________________\n",
      "sequential_1 (Sequential)    (None, 28, 28, 1)         3198977   \n",
      "_________________________________________________________________\n",
      "sequential_2 (Sequential)    (None, 1)                 1561601   \n",
      "=================================================================\n",
      "Total params: 4,760,578\n",
      "Trainable params: 3,198,593\n",
      "Non-trainable params: 1,561,985\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# prints a summary representation of your model\n",
    "c_g.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. Fit model\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-21T06:35:50.450932Z",
     "start_time": "2018-09-20T15:10:46.654237Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 1/100, d_loss=-0.292, g_loss=0.456                                                                                                                      \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnVmMZVd1/r+qW13d7u7qobp6sA2eMZ5t8DyDbXDsmDgeYpPYiaxYCEQeIltCkChCCRK8IEXKQ5SXCAUROUIEEg/YGM9gwNjGGNuAAQ+NjbF7nqfquvf+H1q/s799aru6bt9L/qel9b109TnnnrPP2mvvs9a31l57qNvtKhAIBAKBpmH4/3cDAoFAIBAoIT5QgUAgEGgk4gMVCAQCgUYiPlCBQCAQaCTiAxUIBAKBRiI+UIFAIBBoJOIDFQgEAoFGIj5QgUAgEGgk4gMVCAQCgUZipJeLx8bGuhMTExoenvm71mq1JEmdTuddr/F7cN3IyL7m7Nq1a9p17XY7u0aShoaG3vX+VMigLe/Wnjlz5mT393aVjk1NTWndunXatm3buz98lhgbG+suX748ew/ej2f782m/X897lo7Vf+fXlX43OTkpKZcZ7ShVHCnJf3R0dL9t9XsNDQ1p3bp12rp160DkOTExkbW//r5SkktJR6amprJr3u1dAL+d7e/qfcPv/HrX8Xof+rnSM+mv1157bX23210+rcE9AP30+89Gnv6+tHt/46p+/5nmjpl0an9joz43lfren01b33jjjb7lKUmLFi3qrly5MjvGHOS6UJ/39ie/+ruW+qfUFyUd5W/+ZV7w+/o90MnS/Us6Kklr1qyZ1Zjv6QM1MTGhL3zhCzrkkEOqYwjLO3rRokWSpB07dky7By84f/786tjOnTslSStWrJAkvfDCC9W5BQsWSJI2b96cXSNNnwylJIi9e/dKkhYuXDjtOd4Zq1atyu7v12/dunVaW9esWaPPf/7z097rQLB8+XJ96UtfyjqP96M9kip50/65c+dW5/bs2SOpPHHxLvxOSoMB+Xi//f73v89+J0nbtm3LrnfFR/7+MT3iiCMkSbt3757WLq6jzbTnc5/7nAYB9BOd4f71Ns6bN09SeqfFixdX5zZu3JhdIyWDyd8F8Fv6y8cG+u/9xWDn2KZNm6Y9Z+nSpdWxsbExSakPlyxZUp3bsGGDpFw/0dmbbrrpt9Ma2yOWL1+uL37xi9n96XNk58+nz11227dvl6SsT7Zs2SIpl0v9/ryv6ye6xzVSkic6VTrn/TY+Pp61y+VJ3/u8hf5/8pOf7FuekrRy5Ur98z//c/ZefLDoTynJsKRDtN2P0R8c8zFW7x/vT3Su9MFh7DAv+HNczhMTE9kzvV2lcdFut3XnnXdqNujpAzU8PKy5c+dmwmUwoXTe+JLConh0vCS9/fbbkqRnnnlG0r6PAOC6Qw89VJL0k5/8pDp31llnSSpPkAjc78V1bhEgQNpMW/x6V5zDDjtsRuuuFwwNDWloaCgbQEww/oy6tefKxN+uFLSb37l8GOTvvPOOJOmNN96ozqH469evr44hFwYv/SBJb775pqR9MgHr1q2TJJ188smS8o8j9/XJbcmSJVn7+kGr1dLChQsz/eRj6/pWn2TRUykZL94n3I97+QRWtxBLA93vxTP5MPn1yApZS8lgoX99nNFWv94njn4xPDys+fPnZ/Lkg4meSun9SvpZYlO4nonS34lzvC/GrpTGqn/s0GfmGG8X8vH+YqKk31avXl2dQ0d+/vOfT3vfQaHdbmvLli2Zt8RYdD3hbz6ofj2ycTnUP1oledMXJY/SgR6++uqrknKZ0gcY9v6sksGKvvOxk/Z9yGY7h0YMKhAIBAKNRHygAoFAINBI9EzxzZ8/P6Ps3vve90rK3brjjjtOkvTcc89l/5ekl156SVJOLf3sZz+TJN13332S9nHfABf8mGOOkZRTcLiJv/zlL6tjf/InfyJJ+tWvfjXt2XCk7tbjzkLfQFH5u/3whz+sjp144olZfKgfDA0NaXR0NONnoSiRk5TiHFBk73//+6tz0BF+7MUXX5SUZPbggw9W56BRcdsfeeSR6tyRRx4pSXrllVeqY4cffrikxEPzfynRpyeeeGJ1jOtw6T3hhT6HGpT2yRh6ol90u1212+2Mlnnf+94nSXr22WerY+jE888/LynXt7feektSTmGgE9zrpz/9aXUOmdEPfq/XXntNUk4TITP02HWX+7qMiZEsW7Zs2jnGl1PW/vx+MTw8rHnz5mWU0FFHHSVJ+sUvflEdO+200yRJTz31lKSkd5L061//WlJO1TFXHH/88ZKk3/zmN9U59J9jUFxSomKRuZTGOXSh6xvj1OcM6GjmHB/LUFo+3l0PBoGpqSlt3ry56k9Juvvuu6tzAGqM9l522WXVOWTpcxv9gUxdR0866SRJKbbvz2aeQR5SmicfeughSXlMmrF74YUXVscYv1B80PuStHbtWkn59+Hll1/OaMOZEB5UIBAIBBqJnjyoTqejnTt3Zl9DvqgeaMYCJ1j64x//uDpHwNI9KALGZLN4lglJGBzzDCe+3G5l8fXnnHsDJDu4B8j597znPZJy74p7eRB3x44dA0uS6HQ62rFjR2b1IR8PNGOFALc4aQuWpJQCxySU+P1/+9s8Gcmteywlt7CwyJGny44+8UQIQHvcI0X+nrgyyCSJbrer3bt3Z0keeEmemIFcsFjdW0V2ngWFh8u93KOgLwhE+/sSgPb2IDMsXjwM/617ROjBGWecISnPcKWt3qennHKKBoVOp6Ndu3ZlCTiMF7f2vU1SLs9SGjNzBXOHyxp5co17OPXf+f1p1+9+97vqHHrl44Xf0l+wDf4sb8/+ltT0iqGhIbVarSzZizb7OGBOZO5x+V177bWS8rmN/mDcebYt3j1jwLPymBtKSwPq9/Zz7kG//PLLkpKnhictJQbAdfSYY44pLlspITyoQCAQCDQS8YEKBAKBQCPRE8XXarW0dOnSzAUmOE/AVkqBRegLz4GHwnJaCFoNF9vpQqglpz3q93L3lCA3rqUnIODqOmWGq4+b6msmcH99Dc3q1auLbTkQdLtddTqdjNLEzf/+979fHbviiiuytpG8IaX39WME3nHNnfaoU1IeQAYewIR25V+XJ3LwxaYESqF5nC6gfz0p4vXXX8/0qR8MDw9rbGysmHRCcoiUaDb0wemG0tquE044QZJ06qmnZtdIKWnh9ddfl5TTzVCa/r7Qfei8r7Gjv5zWgiaEivI1T7Tbx5LTWf2i1WppbGws60NoHE86QQY8m2QSKY0rT+JBNwjoP/HEE9U5qEx0mGukNMf4/elXaEinr2iP6z/zQqlqBGEHXxvklO0gsGvXLr3wwguZzqELTqWhM4x51ytCJueee251jHc8//zzJeX6znpRxrWPNxJDXKehAlln5SEO5ieXC3MJz/T5gLHmx955551ZJ0aFBxUIBAKBRqInD6rdbmvz5s1Z0BQLyYOJWJMc8xRT4F4S1Qmwyrz0DF9aUio95ZFjpVIyrMB/+umnq3NYxW41YQmQukpqsJSsFm/rwoULBxY47Xa72rt3b5Y0gNfpQf0HHnhAkvSRj3xEUm4lY6G4BVQvyePyJIjOu7kljIfg1t3FF18sKcnAZYHl5ymtvAt96hZtqYzTyMjIjDUVewFJJ26J0p8uA/qPZBCXHfrjFuJFF10kKQV6Xb68H/d0y7CU2EM7kHUpecArBODh0lZPeCGxx3XWS/f0i3a7ra1bt2aJMXg/3u66XDwgDnvix5AVFrePp+9973vZsYcffrg6R984y4FFT6KGj5tS6S6qNuBpeJIE8wPXSKmMTz256EAxMjKilStXZmndJCK53taf78sRYKi+8pWvVMeYv0iScD0gaQFv1MckSVKnn356dQwPlXv94Ac/qM7hwfsYhgUoVRlBb31cLFq0qFjBooTwoAKBQCDQSPTkQY2MjGh8fDzjvFmU5xYBi/lIgzzzzDOrc1hIH/rQh6pjWAe33XabJOlb3/pWde7mm2+WlDyhK6+8sjr3+OOPS5L+6I/+qDp2//33S0oegltDeE7O4/P1x/KqW/dSbrFt3bp1YGnRQ0NDmjNnTrG4oltMnMf6vuWWW6pzeDG+eNFTl6U8RoGlBA/9d3/3d9N+d9NNN1XHsLauueYaSdJXv/rV6hyWny9sxHrCGnTuGfm7pbh58+aByVPaZ3m7h4PX5p4icSna4d4AqeTEWqQU52NBKv+XpAsuuEBSkoF7G3g/3r+wC3hX7qmVauuhe3h5bp3i6bp16vreL1iY7x411rtb1cSg8HBcdujUscceWx0jlsSYc/0hJoIX6fEj4qweN4VFuffeeyXlMdLSQmk8OtK8PZ7MOPGYSylG2w9goTwuz5j3eYa/kb3HKomJ+/KF+oJ6vGu/F7rq8W3mA85JaZxeddVVknIdRX/5V0o6WapdCjzutXnz5qK3WEJ4UIFAIBBoJOIDFQgEAoFGoieKb2pqSps2bcpoDFw9d1mhI6AsPBCJW++p3tBxpP1CEUqJ6uL+TgfgJkL1Sck9hYJwugf6w/eUwsWH9vEKFwQonQaob+fQD9rttjZt2pTRMiSduDyRI+32qhGkdXugH1oAKsApDugmAqGeMPKBD3xAUk4x4bZTl8vfnfRgvz/uPvSf35/2O0W2ZMmSLGjbD/bu3au33noruz/tPfroo6tjBLyhIjzphDY6rYXOQhm5/kNX8RynPkh6cF2HIuN36Jhf75U8eDa/K9FtTpeUVu4fKNgawscQAXen0uhz5OJjCDhlTQJEKYGF5QzIwOlXkq1KfVOSD/f1LWKg09BP7y+uczqqlOzTD4aHh7Vw4cJsTkG+vpFhfa7ycUTSjbcT2ZBE42npgP7xOnokTjglSFIJ1SK8f6BBXUd5Zmns8E6uo2NjY5EkEQgEAoGDGz0v1F28eHH25eYL6ZYIHhABT6+6S9CUBXlSSl0l9dNTw6mUTZDbvSu8pNLCMyp4uzeAxeZpvAQQCYZ6Gi+Wr6dWDzJJYteuXXrppZcyKxFr1JM1sP4JirrsCJB7lWu8MF8ADOo7dfoCSoKhLEyV0qJA7u+WMJacB7LpC9LNSxsWujU1SHmy8Lm+OZqUpyuT4o0n6h4geuDWLIkTl156qaRcBliXWLyuu8jMvRmq7aODnuCAnnliCfJDnh5Ip788tdoD/P2i2+1qcnIyS5PHkvfFtSxdwDPyhAhYEfcUSZ6qV+mXkifEezMnSGmO8Rp0wGtoAsaSW+v8TX+5LuJ5uwfgbRsEpqamtH79+mzpDSyIPwu9ZQ7yfkcXvK/ryxw8db/OWnm1+XqtRynJkjHw6KOPVudK9TSRITL1Mc/863Poli1bZj3mw4MKBAKBQCMRH6hAIBAINBI9J0ls2LAhW9cBveNBvPraAS+/TkDQqw9wjEC8BxDZxBDqzdf44Eo6HUY7cJd9FTlUjtMNXE/Q1OkSjnl7lixZkrm3/WB4eFiHHHJIRlngCnuQs+4OQ2NKiRJxihWKi0AmFIKUKI7SOhyeA0UopaQKAt9OHdDPXrcOmgR6wBMEkLtTsr0ETPeHqakprVmzJpMPdAVJMJL03e9+V1Kiopx+oM+dtoSCveeeeyTllVHQBdahOV3Luh2nX7mOd3bdpU98HUmJcgTI09uP3pQorwPByMhIRj1B2XmSBPKm4oZvr4Os/J3QR3TXxyjnSPDxunvos8ufOQDdLa179KQo9B3a0il9jrnsSJIYVCWJOXPm6NBDD81kSvt8nDJu6E+fA9CFUgISOnTeeedV56D1OeZzC3Ov1xtlnqSN/myScJzGQ0fRc0/Y4ll+/YoVK6ZtIfRuCA8qEAgEAo1Ez1u+j46OZmm2BNzcaiWRAUvKv/SkhHuADysd69vTWvEuSlsZ82z3qrDK+EJ7gBdrya052obl5dYoFoRbxbt27RrYhoXSvnd1eWJFudeGdYQlQ308KQX63dLkGMkAvqHcJZdcIin1g/8OObqH6ZvPSfkqdLwHtwbxQLFUPbhbr9oh9RYw3R/27Nmj1157LUsyQA/cssYLJBjuz0dHPHmBIDDtd/kQBC55M+iJbyKIzPAGXBcJ6rt1Wa9w4rrIe3oyzGy30p4NqCThXjPv614245X2XH/99dPaTxUOKVWdoXqBJ7BcffXVklISxtlnnz3t2V7p5Nvf/rakpMfeLvrCGQ/GF/3r3hjt9xTq2Vbdni3mzp2ro48+Wh/84AerY8xj//Ef/1Edw/OgTT6O0A/3Suj3yy+/XFK+FOJf//VfJUmPPPKIpLzSBwk/Pg8wXzAWvNZjqYoFci4lSTAPeDLKxo0bI0kiEAgEAgc3et7yfXJyMvMg8JzcKsYSJ5XWF0LC8Tv3jrfAV9kXjWHx4GXxeynxoR4Dcb5fyvlW7u8WMBYKlpS3C0vKFx4uWLBgYDGTTqczLc0aq97fA9mWUvpBiSOnH/z+eLW8g8cLkbV7G/QhlpZ7dlhTLuP6wkm3Xmm/t+fwww8fWP24VqulJUuWZPLB+vc+xxoljuJeDx63e/joGRal34t4WqnyPen6HgNBp5588klJuTyRVSlmAivhi5B5psfLsMZLqdi9YmpqSmvXrs3eCX3xVH7GFXLyhfkskfAF9ryzp6oDjnFNaRG+x4iYD7iu5P34nIHO0ofuCSBPX5qCztaZhAPF0NCQRkdHs2fUYzhSiuOUYmX0sfc778j7seheSjJlbnEvE/31OY6+xXPy+a40h9bnJ/eWOOb3j2rmgUAgEDjoER+oQCAQCDQSPVeS8JRQKVWJ8NX19W3gPWgN3eduOi4hx0qr5evpp36d14riXqWUR1x+pyP5u16/Tko0gwf9NmzYMOtS8fsD7r4ncpAO7dQbW5OQ/ukrwZGnb41NEBqqlNRgKaU+QwE5/YGsfLMz5A+94rRCqWoBMisFTEuVOdatWzcweXY6He3cuTMLEEMNO43I86E3vI1c73rAdRxznYJ64R287hvHLrvssuoYlDjJEd6uUkAZ/YTCdXq0FCx3CrBfkHTi+gnV5RSVjycpp9mgekuVY0iA8OobHIMCdaqKIL8nilAjD+rJ35/x7jQe8xdyd4oV2foyiEFQpXV0Op1MT+g/tiKSkl6VqmHQdh+nUPGEO+q176Q0p3hlHxKqnFZm/uA5noRGv7vO8SzuX0pBd4oyKkkEAoFA4KBHz0kSu3btygKkBNI8FRWrg+t8kSTWrX/9+ZvAG1a+359UXf/ycp0vGuSZnloN+Jp77TWsBKxE//pj/blFtXz58mxxaz9gw0L3GLFQ3FPF4sTbeeyxx6pzeIpe4RwLk3crbaJHf5UWzHnl5nqqrntc3KNkMSE79wSx0ty6Gx8fL1a/PhAMDw9r7ty52TIFrHtPpMELLCU2YP27V1BfGEl9SAderif4oJeeqozucX+3XEuLtOkfWAJPOqGtnlruY2FQ8IW39J2PUbxB2uhtwLJ3r5MxzKaBrv+knHOMxdH+bN8clWfR555ogNfhHiDjC31wjwuvppSEMaiFup1OR7t3785St9F/96pgdHg/H5Mknvg8hIeKvL1/YLCQkSeCwRj4O3MP5hEfOxwrzaGl2pOMnXoV/tkmRoUHFQgEAoFGoueFugsXLsy8Jb7UbhGw6It0U7cqsbY/8YlPVMdYfHvDDTdISpXIJenOO++UlKqZ33rrrdU5OGlfGIjFRYrvl770pWnv4ZZHvZp5yRtwa3r9+vUDi5lI+6w8t/qw2H70ox9Vx7BC8IQ83kT7vco7fXHyySdLyrfnpm8oP+XeBrEA3x4dCx+P1D07uH33QOD0kZ1ba1hffv0777wzLYZxoJg3b55OOeWULDaGxewWW73PS5WiS8foG9fnT3/605KSp4MOS6l015lnnjntGDrkMQ48IdcvvK9SaSTgcZTS+QPF5OSk3nzzzcwixltyGRObQ5d88SvsicuM+/Gvx0iJZeMl3H///dU5Frc+88wz1THisSVWA9m59c4xPDqPj+PZlRbFDgrDw8OaN29etqMCnpPHoOqLn12myPtjH/tYdYx5mHnVWRYW53N/99RghzxOR/yP+du9N3TUWSXkhUxLY8e9/LfffnvWYz48qEAgEAg0EvGBCgQCgUAj0XOSxI4dO7KgOwE+ry5B6jNunCdV4JI7LcExrqcqspQoC2gwAqt+X6pTSylwzyZbnoKOq+qBftz6UoVgjrmLu2zZsoG5/UNDQxoeHs7oJ/52lx46BUrKE0CgQpyGQY5s2ezyx21HTl5pHurAA/FQNARKnY5Edp4EUA/+O72C3F2eK1asmFb9/kCxd+9evf3221kfQkX4ynd0D1rEU+dpt9PYtJt/nbKjagV6Bu3sz3a6FnkgJ08gog+9cjky5tmlqtb1avuDQrfb1dTUVEbHEFQnCUZK8kMGLjsSFJzGo39I7PH28yyWlVD9XUp96LUNaQf39IrgUKWlSifQXKWK4P6+Pg4HgXa7rW3btmU1GEsbZzIGkZ+3CZre7wHtT9UIH5OMcXTPwzE8x4/Vq+qUKqf4MeRMX/gygFJ1iagkEQgEAoGDHj15UCMjI1q6dGm26IqUW0/9JCBKerQHSPGufOEev6X6Nlts+zEW/frvqO/lVj0BVILP7lmUFupiEZQC5gRe/X03b948sOrbQ0NDGhkZybw8vCMPKmJ9kKDgFjbWim/Tjpd5+umnS5Luuuuu6hwWGVa9e6QkL7hHQyozQVuXD1aQB6iRZ6maeWmL8kEnnbTb7czq5l1KHibev1vwBKXdC8CD/fM//3NJufdw4403SkpevOs66dlu1aOX3NO9SRJ03EOnbcjOk3iwfktJAINAp9PRtm3bsoQInu86Qp8jO/dKsMJ93H7nO9+RlLwqT+zg/ixo9mA8QXhfCAw7gIfpBQMYty5P5IPcXZ60w9tfWozeD1qtlhYvXlxcDO8LYmknrIZXP0dvP/nJT1bH8L5Y7vBf//Vf1TnGA94+zIqUZOqJJ3icnPP9/5iXXOcY46UEo9Li/F7m0PCgAoFAINBIxAcqEAgEAo1Ez1u+b9q0KUuSoHS7UyK4oKyC9tXaUEXuZkJTcS8PskH34Xb7mh7cR98sEdcR193pMNx1X73PPbjOEwQIBDoltWzZsoEF9bvdrjqdTrbKHkrDaQyeh9sP3Sklas/X09AXUCmehMGGg6zDcAoF6spX3l955ZWSUl86HQY15zQI8oRycbqEYy6/8fHxgdWPGxkZ0cqVK7O1LdAVrrO0kf4tVWcoVZdAP33NGWtLkLlTJbTD6RD/rZSvSQEegKbvSrpIf7n8/Lf9gnWPvmYHPfBxRX/Sv75WDvn7OhuoZ8a5B8z5m00YfZ0euuo6C/3EfOLUEZSWt5++KFU6oa1OUfFOPkb7AbSp6xf65++KPvF8TzKhPqEn5Hz4wx/Ojrm+s64RCtNpUJ7pesP9S9Q7Y92rhcyUaFZKPBkfH48t3wOBQCBwcKPvJAlSxL0WHIkTeD9UN5dSQoQH9Umm4Drf1p0vMMc8pZwvNyufJenYY4+VlCwq/9JjGbmlgkeAZVDa8r1ekXtQQf3du3fr5Zdfzix4grduhRKYxDN167VUG42KEP/5n/8pKbcSkQsWpKdYc8y9Nyw5PCkqIUgpOcU3o0M3ZkqSONCA6f7AKn0PKJMy66n5JN6QWuvVnfGSPNECi5NkFn9fEiCw/B944IHqHIFr92DPP/98Scm78gQTvAH3AJFVqXJ5qVL0ICtJkMRTqv7v7UYH8fA9KQQvyWXMu9x2222S8qQoqsLcd999kvJlIrAnXkmdZ/Ovp16XPC7+pg1+Dnm6fv4hKkksXLgwS6Zh/LueIDfe1WXKXHvLLbdMayfv8+1vf7s6B7vCPZ29woP3ZB08IMaO6xzeqHvE9WQUH/O804EmRoUHFQgEAoFGou8YFPEf5x1Jl8T69vRJ4NsO81u+9M5Jcx1fZf/ycn/3KOCR4VTdAuML7x4CX3Z+V69c7tdw3SAX6o6MjGQeHRaKxyawfIgN+fXIw61Q2le3hKTk9eBxeXwEz8JTYJEtVpvfC4vTY1ZYnzPFoOqLod2L6wds+e5WNO1nnyEpxTewYl2epPXWFxNLqeKz8/XoP/3luov3zmJqKaUB4+l47Bar1PUTfeQ93NvkmS6/P8RCXZcPf/tidzy++rbjUhq3xD6lFIeDEaA/pFRDDtm5t4RX64ub8TrvvvtuSfn7I2PXT8YSMnb2osQq8MxB6ai0rw+d1WAMe9/yN/OS6zRMk3vyLKRH/zyOD0vE+/kyCWTpi5nRUZYE+fXE4kqL4euLpr1dLr/DDjsse5+ZEB5UIBAIBBqJ+EAFAoFAoJHoO0mCZAevJAGlQXDZtyincoFv+gaNx3Ve3QCKgKCpp1hDN7m7iGsLLVfaCsJpg/rmfh7g47717QwGueV7q9XK5Anl5gFTXGba5jW7oDE8zZwKBiVajneHjvFkFa677rrrqmPQI9AKjz/++LRzHpiHmoA68QBraXuONWvWDFyeJMpISVZOKUNhULfMKTiScLx+IX1Rqj7AuZNOOim7Rkr95gkXpIRDRZWqcHjaOH3Ofb1SRCmoP+gkidHR0YyGhFIrLbWAAnXamIoGvkUM/c02EK670K70l8uTdjgFSl8gf08Hhy73+QH6kXv52EPuPt4HtaQEDA0Nae7cuRlNCUVamqtI3nIalKooTr1BxzHGfI5jLKIbnuDgcwlg7mSO8LAHfev34DxjwXWUZ3uYZOPGjZEkEQgEAoGDGwNbqOtBObeIpPR1l5Il4EEzrBmvqAvwArCG3Hrib7cuzj33XEnJGnILAcvDLSQsWKwRt8C4v1tZvVTi3R9GRkY0MTGRWXhYTJ7cQRuxuj2wiyXi6fRnnXWWpGTtuAfLu+PBuneFjD3FvV4bzS0hrEsPTGNNldJXSS6oVzZ2C30Q8CQWPBC3Nln0iAfo3uo555wjKU/swTpHPz2ln/vjYZJGLqU+dA+NfvJttAEJCJ5kgIyRp1v0JZ0dZPVt0vY9xZk2ehIP+kkySWmxu+sBevaNb3xDUi4LxjuelHur3N+9Ayp7o9e+EJpx6+3nfvSNey0korgHO+hq5iRGea1NxqknnjAm8EYKksqAAAAgAElEQVTc02Y8+wJ55kDk4B4anjx67PK79NJLJeWJQsyhsAgkszi8/fUdDPa3OH/VqlWZPsyE8KACgUAg0EjEByoQCAQCjUTfSRK42F5J4uSTT5aUqj/gWkppwzxPkmDrB9xp1jT4PXBLPTiHC+oUExTKHXfcIUn6+te/Xp0jUOuBflxp3Hqnn6CKPOg7yMoHrVZLS5curWqTSYl68KA+Lj3Uj9N/0E7XXHNNdYzgPzJwipXV+yRSfPSjH63OIRffMJJ1KbjxTkciF6cfaCOUgetKqbrEICtztFotjY2NZXQnFK/TzlAY6KxToMjqr/7qr6pjJPv88R//saQ8IYjtNkjs+bM/+7PqHIk9JGVIqcoH8DVV6DjJBlKipGbaysDlN8gkCShop4tKgXZoKGgcD6qTAODyR+5c7/qP3kO1et24q6++WpJ02mmnVcfQKcaxU3ZQoF4fkbaVEnY45jS2062DAJUkHH/6p386rZ3QksyNTsFB7bmcGZfI289B/6FLXtkH2V9++eXVMWoYUt/vnnvuqc5BIT788MPVMcY4Ouoyo1+8Pb2M+fCgAoFAINBI9J0kgcXpX0SsICxsr8SLdeL19kg6+N///V9JuVXDOTwuty7x1LySxIUXXigpeVK+URqeRamaOdZWqYKAHzvqqKMy67EfjIyMaHx8PAtaIlvfhBGZkRLuadT195BSNWKsHfcQsP6xbNwSwsrxVf+AoKgnpPC3JyDgXZJg4npBwNSPTUxMDKwyx9TUlLZs2ZIF1mm3e1Uky2CVelAf79T7hHfBcvUkCZJ96Dc8TinprlvGnqAj5X2JbvuqfuRZCkBzzIP6/p6DgqfcA5cB8itVh6fPvY0kSSBr3xCvfu6CCy6ozlFj0ROfSHShH7xdzDGefMC78DtvV6ny9iArc0j7+m/nzp2ZTOsMkpQqwyBTnxOpa0gNUynJBJ32OREPF6/Uk1KYZ3xDT3S0XqlfSjUtPVmNtvFMZ5yQqSfFLV68OLZ8DwQCgcDBjZ48qOHhYc2fPz+zME455RRJebVoLHbiTZ5mizflX3h4eSxITzcnhRYLwflwLE2Pv/BlJjbm3huWB/ujSMlawop3C7de007aZwn4+/eDVqul8fHxzOrDsiN+ISXPhviDp81i6fuCW+SOJ+VpyNyfYx4jwtIq7Z9D7MGvJ9XYPYT6NvDuzXCs/kyXbz8YHR3NqkRLyYJzGaCPWKAuf/h3j8PBEhDD9Hgr1xE3Re+kVCvN3w8dR07ORqCfXlcRfSxVM8dTcXkOsvp2p9PRrl27shgy1r6n5hNTQVe89h2xkdKCWJgI96jRQXTdFznjTaLXUqrMTbzE5YOXctddd027R2m8805/qIXPUjl1H3mV2AYYD9giKcnPWRZ0El2re+rS9H2bpDT/eVyPccE4cX0kfgUb5fdFH32hLnL2OXPDhg0RgwoEAoHAwY34QAUCgUCgkeiJ4sPl9wAf6aMeSIMSgcbwlchQGp5oAMWCG+urwQn6Qe35c0qVD3AvSU91NxjX1YOmJECUVsGXgtATExMDrc/V7XazgDwVGzyVnOfxvk6vQKd6IgeUAXSSu/tQAVAMTmGQ7OC0E+57qWw+feiBZPqc+3vAFLl7e3oJmO4Pk5OTWr16dUafQBV5pRP0keC8p24jT68kgQzQKdeHf//3f5eUqFanjwl6u4zRY2gkT9jhmPc97UbHfYkDVI3TJXUKtx+MjIxo2bJlGeUFhepBcp5FEoPrZ33ZgTR9w0hPM+c9WQrgYxX6zscL92XceNo+dTud0oJyqidXSEn/fb7i+dy/X3Q6nSzlmmNSLgf0CP3wOYfEEdc1qGX05bzzzqvOIVMoZNc5En88rEJ7SJzw+R75eSIPz0RvZ5MkEZUkAoFAIHBQo+ckidHR0cwa5cvtixfrCQpeyZhkCg+8EoRjEemDDz5YnfuLv/iL7NjNN99cnePYmWeeWR175JFHJCXPyRepYjV5EA/rGUvCrTMscQ/w7dq1a2BB/Xa7rS1btmQWDd6LL37FSsTCc0uLNGoPohLILm0YieWCBezWMZaS3wvrnz7160mSqC9k9nv59uXAA+Y7duwY2MJnaZ8150ke9J1b9STc0G732Gmvp84/+eSTkhJb4PdicTOekY8DElfcOmVBJH3uFj/Wuqdd4zUgI6+BBlyfvT5bv2i329q2bVvmgaCL7gVQf5B3wfuR0jKGK664Ylp7P/vZz0rKFy/feuutktI84b979NFHJaXELEl66qmnJKXx7kkiePY+fus7GviiUuTuHr7r+yBAopmPmYsvvlhSPlZuuukmSdKXv/xlSbk+MmexwFdK/X799ddLyr18jqGrnmTCgn0vnEDSEwkqnhREBXpPjGJOKS3mZw6q7xIRSRKBQCAQOKgRH6hAIBAINBJ9J0l4rSwArQYV6C4i8GPQBiQxOO1BVQOoL6f/cMWdIuBeBG6djsSt9AAia4YIILrrSsDcA3ynnnrqQALQUqrL5UF0aAbcfq6Tksvt8kdWLk9k5WtCALQHlJRTNVBfpQ0UoWvdNYeGPPvss6tjUCIE072t0BROw5x88skZHdEvWq1WRsvQXl+lz9+8m9O6tNfbxLtA8XlSCFQp9JyvqYIW9aQHZAXd7FUR6GeqoUipMoTTfoAqFKzdkhL965UBDhRz587VkUcemVFe3N/7lXemf53ige7zpArkAb3ma52gSKGLfL1NabzTvyQxuDxp1w033FAdg+aCtvREA6htr1YDxehrgfoBlSQ8kYc6jp7sRaIG6+x8LDN2PdTAmiVk7/qCDKGJ/Z05xjwoJT1Epv4c5hmnCZlD0GmnL+kDn4dPOeWUIvVfQnhQgUAgEGgkhvxrt9+Lh4bWSerfNDv4cWS3212+/8tmRsizQshz8OhbpiHPDKGjg8Ws5NnTByoQCAQCgf8rBMUXCAQCgUYiPlCBQCAQaCTiAxUIBAKBRiI+UIFAIBBoJOIDFQgEAoFGIj5QgUAgEGgk4gMVCAQCgUYiPlCBQCAQaCTiAxUIBAKBRiI+UIFAIBBoJOIDFQgEAoFGIj5QgUAgEGgk4gMVCAQCgUYiPlCBQCAQaCTiAxUIBAKBRiI+UIFAIBBoJOIDFQgEAoFGIj5QgUAgEGgk4gMVCAQCgUYiPlCBQCAQaCTiAxUIBAKBRiI+UIFAIBBoJOIDFQgEAoFGIj5QgUAgEGgk4gMVCAQCgUYiPlCBQCAQaCTiAxUIBAKBRiI+UIFAIBBoJOIDFQgEAoFGIj5QgUAgEGgk4gMVCAQCgUYiPlCBQCAQaCTiAxUIBAKBRiI+UIFAIBBoJOIDFQgEAoFGIj5QgUAgEGgk4gMVCAQCgUYiPlCBQCAQaCTiAxUIBAKBRiI+UIFAIBBoJOIDFQgEAoFGIj5QgUAgEGgk4gMVCAQCgUYiPlCBQCAQaCTiAxUIBAKBRiI+UIFAIBBoJOIDFQgEAoFGIj5QgUAgEGgk4gMVCAQCgUYiPlCBQCAQaCTiAxUIBAKBRiI+UIFAIBBoJOIDFQgEAoFGYqSXixctWtRdvny5hofTd63VakmSdu3aNe0Y/w4NDVXnut3utGN1cI2k6lml3/l19WOl6/nbf0cbO53OtOs5NjKSxLR3716tXbtWW7duffcXmCWQpz+z/r5+bKY2ep/Uj/F//+1M8pzpmN+rfs/S/V127XZ72rGpqSmtXbtWW7Zs6VueY2Nj3eXLl2f3p38nJyerY8iFtrrspqam3rXdo6OjknJdP+SQQyRJO3bskCTNnz+/Oscxfift0x9vF88rtUtK8uZ61wuu45zf7/XXX1/f7XaXqw+U5FkfX/437Snpj7exrse7d++uziFrruH/UuoTv//cuXOzc349cvf7z5kzZ9p1oKQPtOPVV1/tW55Skqm/A21HN/zYTGO+hNIcV8dMc0Xpmf48+nHPnj3T7ots/Xq/r2PdunWzmkN7+kCNj4/rc5/7XNbhzz33nCRp5cqV0xp18cUXS5IWLFhQnePF/BgDeWxsTJK0devW6hzHuGbhwoXVue3bt0+7F8e4bsOGDdPu9cYbb1THJiYmJCUl9mfzzG3btlXHjj/+eH3mM5/RILBixQp9+ctfrgaZlCY4nwQ5j+zmzZs3rY1MlH4dcvH2IxfktGjRouoc775kyZJpx1A67/vly/eN19/+9rfVsfHx8eyZ3i4mT/qBtt55550aBJYuXao777wzGyB13ZKSbN/znvdIygcz1zHYJGnjxo2Sktx/8YtfVOeYSJCTy4dz/F5Ksv3d734nSVq1alV1Dl096qijqmOMpSOPPHJaW1evXi0p/ygyDm+//fbUKQeIZcuW6e///u+Lk/kRRxxR/Y0u0df+QeacT1Svv/66JOmdd96RJP3+97+vzv3617+WlHQLOUnSMcccIymX8VlnnSUpyYDx7M/0e6Abxx133LR3os+97/lofPzjH+9bntK+8fGZz3wmM0wYr/5cPgTohxsJGFtLly6tjiFn7sH/pX3zjJR01PWFseB9xpjZvHmzJGnLli3VOca6359xhN76mOcjV/8GfPazn9VsEBRfIBAIBBqJ+EAFAoFAoJHoieLbu3ev3n777cwlf+mllyQl11xKrjV0xhVXXDHtXieeeGL19wsvvCApud0vv/xydY5jP//5zyXto9jA888/P+0Y9zr11FOz/0vJ1XWKD7rgmWeekZRTa1Aufo/jjjsuow37QavV0qJFizIKhXfxZ3Lspz/9qaScFnrzzTclpXeTEnVy9NFHS8rlyb3oN2gTKVFX73vf+6pjL774oqREMf34xz+uzkGXuDzpe3Tk2GOPndYuqANpH31Q4rMPBO12O7u3JN19992ScmqYdpxxxhmSpMsvv7w6B/XiFNB3v/tdSUkWTpm+9tprkhK19sorr1TnoD6g4qQkD8aLy2fdunWSpJNPPrk69t73vldSokrOP//86twPfvADSdIvf/nL6phTb/1iampKmzZtyvTtRz/6kaSki1Kimi688EJJ0mmnnVad4zqnhB599FFJKTzglDW6hD7TV1KSD/9KiYJDx+lTSXr77bcl5TQ2ugZVBZUoJSrd6chNmzZp0Oh2uxnNRv/5s2gLsrzooouqc2vXrpWU6wmyPOWUUyTlNDTj+Wc/+5mkXOd49rJly6pjb731lqSkc8yNUpqHvf3r16+XlKhU708oVx+X27dvz2jDmRAeVCAQCAQaiZ48qMnJSb355puV9S0lC8eDk3gleDieQXXeeedJyq16PAi+5p7NwnVY63zBHW5BEkR+8skns/9LycrAkvBnY+G5Zcg7YbFI+yyuUtD4QNBut7V169bM4uBdvN0cIwCKZSgli7907NVXX5WUyx/LnXdwz5dj3r/cC9m5ZYZn4R4FHhZW9VNPPVWdw0pzq/jUU0/NAsb9YGpqShs3bszaSN95YJ2kBbwd788zzzxTkvTAAw9Ux7AM+Xfx4sXVOfqJPnRPjevcu0Uu6FYpScW9Dfoei9X1EyvU9dMD5/2i2+1q79692TPRMw96Y0GfffbZkpKuSImReOSRR6Zdj6fiMkBHDj30UEl53yBHD+iT1IKX53MHfe73QLb0jXu8sAR+DCZmUGi329qyZYt+85vfVMeQr3sl9C3v/JOf/KQ6x7vi0XNfqTyHMp5LY56x54kk9O1DDz0kKXlUUjlZCrbn8MMPl5QnpsGUuUwPP/zwrH0zITyoQCAQCDQS8YEKBAKBQCPRc5LEunXrsiAlLr+7fLiBuPof+MAHqnO4/O46Q9u9//3vlyT96le/qs5BG3zve9+TlCdEfP/735eUAoP+TILLTldB+zkFQSIBazNYAyAlN9vXRq1evTqjzPpBq9XS+Pi4du7cWR0jOO80VT1RBCpCKgfbuQ732mlRruPYSSedVJ0jGOrrcJ544glJKcjp8iRBwIO7rIPinCcIQFc4Jbh69eppiQ0Hil27dun555/PkjZI1vBnQvNAefg5qBfXca6DmuQdpfTu0K++5gm6z/UFaoOkCg8WQ3U5BUr/QN148gY64pQKch8kfF0c9JxT9LwLfe1JEswPnlgFJck5p3jRBZIEnO5Edr4miLnm9NNPz+4tpSC/U1RQstD8nqBDe1wffT4YBHbu3KkXXngho7iYX0h4ktJ8CtX8sY99rDpHf3iiGfMA+uJzHMcY3z5XcJ33ATrMvORjAfn5MfqD/vf5Elm6THfu3Jl9L2ZCeFCBQCAQaCR68qCGhoY0PDycrcrH6vNUVCwRrEoPOHPdY489Vh3DInj66acl5V9gLFSsYg+28aX3YCHWLdalp4xijXlqKZYgXoNXRcAydAt42bJlWUJCP2i329q4cWOWJEFigydJcAy4pcWKc7cSCSIjMy8z4wFSSXr22Werv7E+3XtDfu451eEJMgRb8Uw9oI1H4R7XggULsvb1g+HhYS1atCiTZ0k/8VDQA28PSQZuOZO6jZXpXic6SHqzezBYuP5+pPXTv963yNhlxnmYg8cff7w6h9zdC+P+zkIcKDqdjrZv316xC1KyhN2rwoOj790jhSlx5gM94B5ehYZnkULtHhTy9GfDJuCdu36j254UhQd42GGHScqXSNSr1kh5AscgMDIyomXLlmUeKF4giSFSGouMP+ZGKXmorgu8vy9PASRYoCcwT1LqT/ckeWeSNpCV38OrXtD/9IXrNIkTXt1lYmIiYwlmQnhQgUAgEGgkevKgOp2Odu7cqTVr1lTHsHD8i4gFwnUeh8BydK7+xhtvlJRSlP1rizXPokdS16UUZ3JrEUsNywhLXkqWsnsntBXL17lSPCe3LjZt2jSwtOhSDIpFdR43qi869phbPd4kJRkR03M+GsuUBZee/ousPaUV7wHL1NOYkZWnVmM9Ywm7BVxK+V6zZs2sU05ng263mz2TmGdJZ+t19KSkS+6V4J3icXmK9R133CEpeQ9f/OIXq3MPPvigJOnWW2+tjmG9fvSjH5Uk/cu//Et1jrjLN77xjWntxwtwbw+98cXlzgD0Cwr5OmOA9+71I5EV/eiLStHL22+/vTr23//935Kk6667TlKug9S5ZHnCtddeW52DKfF4DF7E1VdfLSkfv/UadFIa78wPfj364DL22NkgAAvlzA796Hrrf9fb8dWvflVSroeXXHKJpORx+XsxrplzfQ6FOXIv+dxzz5WUaup5mn5pqQv3Zb70ZzOXu1e6fv36Wc+h4UEFAoFAoJGID1QgEAgEGomekyRGR0ezuk3QCx6Exh0l+On0Cu5sqZYT55w+wKUkcOwBUlx4T2KA9sMt9SAnbrOnCePaQt+UtpPwY+Pj41lCQj8oJUlApTkNSfAct9iTGKBV/BgoHYMmIQXX3XFk7JUP6Gvk7gkmyN2D3PWAr+9jw2/rAVnXj34wNDSkVqtV3JKl1EaSDJxiLLWb3/LvpZdeWp2DFiJ116kSaGmvZUa/3nvvvZJyKpH+cvnXt+Vw+pvgtSfNDLKSBOPd6Rju79U0AHrMeJbSOHQaHuoZCskpQZ4FNeihAygtr06CPKBOS+EBlwljeSb99PnE55tBYGpqSuvXr89ofXTI24meoAseEkFG/q6MKeZjn6N4H+ZcT3Jjrj3hhBOqYx/84AclpeQHn59I7vBvAPdHR12mHPN+XLFixazHfHhQgUAgEGgkevKgut2upqamigGuUpIEgTQP4pIm7lYrVi5fff9i86Xla+4BzPpuo1Ky2LiHB40J4HvADkuFZ7v1xLPdg1q7du3AgvpUM3ePAsvRU2PrFchLizW9sjHptSRXuAWPF/DNb35z2nOQrVtfWHqlHTqx/HzRHn2NPpSSJPx9t2zZMrDahtSO8/5CV0v6SXvcmqXPXWeRC4vGPe2WZIf7779fUm6JUmPNU6xJWMHK9IA1npDrOLKiTzyFG3j7vaZav5icnNQbb7yRLQTGO/I+pI855+9L33oVduTyoQ99SFKe9kxFdBbme/IP1dtLlfuRjy9DoS+97xnfHPO5AH3wOcATLAaBdrutbdu2ZTLlGT6v0KeldGySzjxJguQIxqKPO1gZPFYfr/Sjj0H6qpRkxXPcA2K8lZKg0An39npJNAsPKhAIBAKNRHygAoFAINBI9ETxzZkzR6tWrcpoBtxTTzyADiJA5jnzJDG4aw3tRJDea20RxMPV9yA0q/c9EYIcfqgv1vtIyd30VdC4qqx4dnqLdjmdMT4+PutV0PsD7r5XDiglNtSrP5S2yChtGAnV50Hrejl+p1ORscvn4osvlpTcdg8aQyc5jYor70kJgCC0UxlLly7N6qf1g1arpbGxsYrKkNL7eVCXPocqcnqDdvu6E3Sb93R5fu1rX5OUaD+vuIHe/PCHP8zaKCU6z+WPbF0fGDvc39vF+Cq1f1DroYaHh7M2Emh3mo3nl5JOeF+vLlBPbPDxRb1M5ge2dJESveljlPZAe3nSD8kyrouM3VLwvpTEw7FB1TgcGhrSyMhIscKK6yhzaKlmoyekAe7HOPUkFqhA1oT6/MqaSk+cgNpDH73aBokcJZqVY07/oRPeZwsXLpx19ZjwoAKBQCDQSPTkQbVaLS1ZsiQLEvP1dCuYAB+BQLeoCAC7VYZ1wFffrUQ2kMOS+dSnPlWdo7LCP/zDP1THWFl+zTXXSMpXomNZu9VEMBxL1b1DAtkehN65c2cW8OsHWKduTVBJwj0pUphL21pTfQMPUEqeE5aMW69st42X5c+hjhvp0VLyqrCw3PrC8vNAP9Y0fe/WKO3xIPTmzZsHliTRarW0ePHiLBW+HsCXUp+TuusJEeixe/j1iigeOOddrrzySkl5VQT6jeC+lFLUqQDiwXI8Vw8yc3/a5W2tr+CXNLDK8I5SEoxbyciK67waPvqCVS6lunLUlEOHpcSQoOv33XdfdQ4PwJN+zjnnHEmp+gkMjZTmGg/I8/dMyTCeJj3oLd9LiWbMjyUdRaa+9IbrfA4ljR8d9evRV/TKq5njJd10003VMea3D3/4w5JSwoqUPHlPnGB+LMm0lFTTy5gPDyoQCAQCjUTPMaiVK1dmFh7xH/+aYx3AP/rXk2NuOfJbvrxsCy8lr4djvsCXtF+PM/Hsf/u3f5OUx0zwktzC5np4XbdG4X+9btYxxxwzsIW6nU5Hu3fvzrwS374ekDpLW71OH96Xx6CwnrjeOXhSz/GSPH7HAj3nr7keTty5cCwzvz/ebyneVIpJrlixYmAxKGmfxe4eKX1X6nNiS67PvIt7yfWabi6f+n5BXpEaj+iss86qjuFd4NU6l48F6m3F0qRdbnkTs3AP32PBg0C3281iI/X9rKQkq9LCdhgJjyWhn8SbPObJ9Xjn7s0z9r09xFfYc85Tr/0dALpG+30sIzvv00HLE9bE5xTk4c9iHkI/3LtiTvO2412WKpBTZfyKK66QlMuI+/v8jZ6zdMLnb2KspfFUKsxQ+gYsWbJk1jtChAcVCAQCgUYiPlCBQCAQaCR6ovikfQFE38IdV80D5fXArtMSXO+BV1zqUrCQNGcCl6WV+k6rUBkBmoEtvKUUQK4nPUiJmvIAH66qB8VfeeWVzF3tB0NDQ5o7d25GSfF+pe02CC47vQK159vAkyQBNeh0AuDdvAIFKaSXX355dYx0ZRIzvKYatIC76/UkCad7OObyf+eddwa2fQkb7JU2pPTkF/q4VDmAd/E+R/e4h1OyyLZUBYK//f4km5DU4hvX1ascSIkaKekn1zmN6uOqXxDQ9zpw9YC4ND1JwmshQuO5fpJ4QwKL06k8i34ojVUPsPPb0vKV0hY9YKa5ye8/SHly73fbRt4pO/oUOXviBinvPg9BGSNT7zPkADXt25WQQk4ympQSfaAefbsk2ug6h94yvkuJPC7nXqrHhAcVCAQCgUaiJw9qZGREExMTmQWJJejBc4J4fGXdwsb6968swXO+wATrpRTQI+jntbYICPr9eTZfaLemsUJKCR2latGlwPTixYsHtkV5u93W5s2bM+sIr9AX8pFCyzt5Gn5pAzECk6Q0uzdA23lPr6BMn9S3Z5bKtcs45lu+045SPxME9mOHHnpoljDTD9BPT6tHf9yq5/0IELs83RsHWP9YiiwGl5IukbDjad5Y356Igh4jJ19UzMJnt35pW6lyeWlRMe13GRwoWFTqSQlY7e7Fk4RQWpTJ+HO5kOaM7NzDv+yyyyQl3fK5AN3z8cj9OeceV6nyNrpG33vtQuYA9w65/yDkKe3T0fHx8cwDwTP3JAnayTFPJCoVFaDfkbNX3MeD4v38nXm2e5nMPfV5R0pelScK1ecBfzfaX0+SmO1GkOFBBQKBQKCR6DnN/NBDD83KYmAdutXNF5X071K1ZbfEsSY9pRRgUfFVZiGrVN4CnUWReAoez8LSc2uEGAlWk7eVdnlbB7nlO9s/e9onlpBz38SgiEuddNJJ1TniTb74jmPIxb1O0vXhlT0Fmv664IILqmOkmrKI17eDx/pyix9ri352eZaqh2/btm1gC3WHhoY0Z86cTBYs/PQ+r1cEL/W5twkPFF08/fTTq3Of/vSnJaU06quuuqo6R8zwIx/5SHUMfp+UX3RYSotZfXFqPQblVapL1fb/EFuUu4dbWqhLm2ACnE1hUa3PGYxJrHzXHyppIyeXJyWj2N5dSvtqUVX+7rvvrs4xrrxaOvNCKaZHO1yeg16oO2/ePJ1wwgnZYmbiwA8++GB1jPmUecB1Fs/J5yWO4e37guVbb71VUoof+24IMDYeIyRuyDzui/kZC77cpx4vK435+uLdqGYeCAQCgYMa8YEKBAKBQCPRc5p5u93OXGACY0474SpzztNsCdT56m5oLRIcnGKCDsBl9SAxyRoe9INmwDX3yr/1SsbetlJCRCkYuWrVqoHRKFQz9wAiz/ckCVLJcaW9agTv66mgBCaRgbvj0H244V4HDTeceob+zCeeeEJSvgqdv70aAv1T6ufSsWOPPXZglTmkfdRI6ebrdu0AABDKSURBVH7eRvS3VDWCZASnVNCD0vtCh/BOvgEkcIqJhACoaE+SoIqIJ/Yg/5LsaL+npTNOBlV9W8qTYGZKkijJk7Ht1zPOGbceVIeehoqDgvJj1JOU0hzAMe83tob3/uKZyLNUtd7pKKcmB4Hh4WHNnz8/G/O0wZMkmAdIJClVrHf6kfAItP4RRxxRnYPaY67zJSzcl/EtJYqWFHTvO8aOJ57Q3/UEIP+tz9vLli2bdfWY8KACgUAg0Ej05EERhPa0aKwrT+PFEsCycw+qFCgnCIsV4GnR119/vaS04NYXlmKFugXG15+vultDWC2e8lrfWtmD0KUK52+88Ub2Pv2A/YvcGiF904PQBP2xfDyZhCC7VzgnkYHAp3tX3Avr0p9Nqqlb8LSD9NLSPkPuwdZT4V2e6I0Hd1999dWBLXzes2ePXn311ax/6Fe3QHl+KahLUNqDzPxNZXzXBwLOyM5rP2I1+jHkgTzdU8ZD88W7yIa2lpIkXP8HtQ8U6HQ6maVerwbubSolbSBP11n+Znt3rwBPEhQJEf670oJb5gqStZwBgTlw/URWM235Xtp9YVBgDvXq7sD7FjDvlQoIlHaEIIHHWRPYLZKgfJkQ+vLAAw9Ux9BN5lf3IhkrpQXMpUXueNfe/g0bNkSSRCAQCAQObsQHKhAIBAKNRE8UX7fb1eTkZHGNiAf4OI977oHImbbZrgdbpURFQX0RRJWS++0UEa4+bqzTVcApCNpRCkLTVnf5ewnwzRZOOdKe0hYcpYQIKkl44gTBZALlHrTEpcdt/5//+Z/qHHSfr81hUzmud9lBYZW21CZg6gkLpUSU+fPnF2sFHggIQDv9gCw80F9PjHFdhBb1ZBCqRKDrriMEoHkHp77oQ6c8oJ55pgfwGSd+rF6Zo1TppLQNvOvIgYI1el41YDZJEqX2eLt5p4cfflhSrv/QffThiy++WJ1Dnh5wr4cFvGoH9F1pe/L6nOPXefv93QcBqp14NRroedc56HxoP28TbXe9Qg7Ii80GpTQ3MIb9d9CEvsURcmPs+nilHz00QF8x5p1iL82hS5YsycbJTAgPKhAIBAKNRM9bvi9evDj7GlLZ3Le1/tu//VtJ0h133CEpD/7hfbiHwBeYYLJbTVTZJch2zz33VOcIMLNiX0qVuL/zne9k95SS5eAeVz0I7dYFVrFfP8hKEp1OR3v27MnaiKXvFjBeDNa6Vx7GCnULiOoPjz32mKS0yZiU+oKV7L6dM5XUXQZYQMcff7yk3BvD8vMU1XrSiScUlJISellVvj90Oh1NTk5mG+DVKzFIM1ffRqeoTCCllN2LLrpIUq7r9Qob7smiPy4DPHpkTJq6lHTcq5/UExD8XtzfvdpBevfdblftdjvT/5kqSXDMvSXexT0GUsdZjuIB9Hp6vCeM0A9+DWMBuXgSVanSCc9CP0uVJNyrcl0dBKht6F477+DPIj2f8enyK1XJr8+rPn+ga5zzzSO5l1cLwRujTifVWBxeLWSmRDPa5ckoW7dujWrmgUAgEDi40ZMH1W63tWXLliw1loWebjVh4VCDzBfW8aV2Sw+rB8vXuVgWPuIheCwBy5GFlFKyfogbuFWCxeEWMxbUTBy/e4wrVqyYNX+6P3S7Xe3ZsyezmLF2XAb1eAL1zaTy4kU4fWTtKaecQ9ZevRteGW9JSp4W93LZES+YaSHn/uS5atWqge2502q1tGDBgux+vKdXbSeWh3foHgJeocdF6JNSmjNVrukHUnSlFCtxGeClPvfcc1lb/HqPmWBp0k9+r1J1avpiEAt1u92u9u7dm70TMYuZYlA+tmEH3EJHn2EEvA4cY4EtzF23XC6AOpX0l6dec6y0ALa0lTr6zwJVKdf3QYD9tVymxNndSyLNnrhOqY9LRQt4P2dBOEcMyt+JucGXVcDYoO/uUcJE+DeAObYUY4Yx8DE/MTGRLS6fCeFBBQKBQKCRiA9UIBAIBBqJnpMklixZkrl8UEC+FTgUEYFjLy1PwO2cc86pjuHu/dM//ZMk6Stf+Up1jiQMriltRleqp0VQzoN5pU3NZgrwQRW5ezrIoP7w8LDGxsayVHjcZHfpkSeryp0Sge5zl57y+FAVLgPoSdx+D1YSVPZaiFBKbIPgVCKydvoGWdEnpdL7Ls+NGzcOVJ4LFizIaEtSZZ32Qw9I+PC6ZaT3/s3f/E11DOoFudx1113T7kW9Pa9jyH2dMkJnkYHLp6TP9coHpUoSpaSEQQCKr1R5pZQkQRudMkX+3u76mHNKkPZDvXuCA/3gCVZcx8aGLmv0yvsemp/nlKqIuD4OUp7SvndYuHBh1melii9UKCHZy5M5eEdPmKHt9Esp8QcK02UK7edhEq4n9OLVNBgz3v/ItLTFDvLzeSa2fA8EAoHAQY8DSpLwoDsekXtVWPMEhP3rjzfgSQBs3kbg2DeEI7hNsNCtb+7r3hhpv3zpPaEAy8jTM2l3aaEuwch69XZPte4H7XZbmzZtyqw0FtJ6QJi0+/pma1Kqhu1BS9KhsWRLFic1z/x3WFO+KSTWEKnqLjssK1+0x3nk6bLCU3R5jo2NZcHhfoAH5ZYllqTLgOfhAbr3Sbs9lZxAP5arywBvFT31ZAz02PsSq5Rjruvov6Negd8tT+7hMkb/B5EkQdKJJyrUA+LS9CQJD4CX9MB/K+VJOQT+kZP/jkrd/ntqS9KXXh2e37q+4e2ji95Wjnn/+hKQQaDT6WjHjh1ZkgRtcM+NJQSMZZ/HSPwpVbEn6ebEE0+szjFfoxvu4dAObw9jhXs5a8XY8vGEN0W/uHeF7jgj1MuYDw8qEAgEAo1EfKACgUAg0Ej0nCSxaNGizAXGlfT6bQT4WMOEmyolt9SpOgLN0CNev42y9Libvq0E9/KgPokZt99+u6Q8eYNgJGsM/Nml8vulAN/atWuztveDyclJvfXWWxUVKiX33WkJ1oBBO7H2Q0r0FFSHlFzyv/zLv5SUU0ef+tSnJEkPPfSQJOm6666rzt17772SpEsvvbQ6xqpzqA6CtrRfKgdMof9KAVOnMnopvb8/UOfMKTUoHdcD+ph+9edTCcLpE+q7ccxpJGSN/F13oZ1cnlAj9M3dd99dnYPq9uoe0LQz6aevpRrUZppSqiTh94cKcvnQxwTfXXe5zhN1oHeglH2d0p133ikpbQ3xj//4j9U5aK5bbrmlOkYVk0suuURSXmmGCg2+fo22kphRqszh89ugK0lQL9IBxekVdK688kpJ6Z29JiA0qNcdpM1//dd/LSnX0dtuu01SGt+sEZXSvH3WWWdVx0j4Qac9DMDYKlWnQU9KiVE+h27evDmSJAKBQCBwcKPnJImtW7dmATVqZXnaJLW2SF10C55gXil9kxRf3yCLLcqxMnylONe5BY/lgCfFqmgpeQOe1o31TDDXLeBS0LSXVdD7w+joqA477LAsTRtPxdNEsVawUNwboC88CAnoE0/zxzLFWqSWn9/fEwQA1p1vIIcn6mnd9e2rPeW4lHTSS2Xj2WB4eDhLaabvPHmhHij3NGcsRE/5ReeQp98LHSexBD2SklXqHgjJQdTg82AxKeqlLd855pYn8nSdrVvn/QDGxD2cUmIMKc5c5+OlVFEEGSFHZ0VIacfK9yQJnun6iTzQRZcPc1OpGjv38qSoUtWDQW/53m63tX379mwOZTyXqvGQGFJK9XfvDx1lrnVW6Vvf+pakpGsk9khp/nMGjHvBJnhSCklcpTmUsePjuVQhvpdEs/CgAoFAINBIHFAMyr/0WNRexRlvB2v9hhtuqM59/vOfl5RbJvDIeA1uoWI5YPF41W48Lq8jRUyGeJNzpXC2bjGTdl2quoun5O/byyKz/QF5ehov6fRuwZMeyrv4+2INsX22lLxHUnXdOsIyxZt0jwjP1zln5MNyglK17lJ8AQ+5FI9wC7uXysb7w/DwsObNm5fJB3iaLjqFN+BeBxaivxOcP9e7hc3feLAeT0R2zu9jsROX8njozTffLCmPQSFPvBSXHcf+UAt1WZjv3jztcYuesUx7fFlJaVxxHbrh+4HBgHDMF5DCpnj/coxF0c5GMJa8end9y3pvF791GbseDALESV1GMBzu2RDPQ34+JktxHZZAlCqQkxOA9+jxKdrhnnw9JuzPro9vKckL+ZViUPWq8bHleyAQCAQOasQHKhAIBAKNxAElSXiiAsEud9MJiEGpEaSTUpDYUypxIXH5PS0dd57061IdKdx8v470X6ewoHk8DRnKBTrAwXVe32uQlQ+kfS6/VzLA9XV5QjvhmnuSBmnL0J1SeifSa52yIA0Xd/+b3/xmdY5nekCTpA1cdU9txaX3xACoEwLmpTqJHiBdtGjRwORJnTOnGOhXNrKUUtAXStODuiQ7eNIJdQjpB6fsCHZDo5QqVjhFgtyhYb1v6C/XT3SDRAunFwlU+7YLUOGD2PJ9dHRURx55ZJbownhyaowgP/964gGydjoK+h1q2yuXoOPco6TrpYQgZOD0Ff3lNCF9jZyc7udYPYlnkGi329q4cWM2h9JXPuaRDaneXhmE8eY1BhmXHPNxypyJjvrvoG/9nZmjeXdPxqBdrqP1JJn69kS8t7c1KkkEAoFA4KBGTx4U1bf9a8jGYh6Ix2olUOdfVCwdt1z4YvN19gAcC/Cwmtwa5cvtXhLBWxYQs1jYj5G8IaWAHqm6XrmX9/QA35o1awa2UJckCQ/SY3E+++yz1TFS5Umb9aQK3tctJo55ggj4+te/Lin1my+8PemkkyTlMmOxYynlFMxkMbsFiqzda9i7d2/2+34wNDSk0dHRrI1Ym54kceONN0pKFr9XMydF3WvksVj84x//uKTco/7EJz4hSXrsscckSZdddll1jnRoT/llk0d00duFp+aJE3jUpYXPpaSEQSZJzJ07V8cee2ymW1QN9zHEjgNf+MIXJOWeALroniXAO/D2w548/fTTkvKECLwpdFdKzAH3ct1Fn52tYazhAbp3SFt9fhvUWAfDw8NatGhR9lzex7e3J9kBD91T5fGqva8ZQ+iv6xWJZXhqXgcVvfLkHjwuPF33lmmPz08coz2lhBhniTZt2hQLdQOBQCBwcCM+UIFAIBBoJHqi+CgV7zQbCQq+Wp6AHkFcd0WpN+Yr0XFnCZw5vYJbyjM9QIpr6RQBSRIE5901xvX0WlTQPLTH1/kQXPU1BWeccUa2TqUfdDodbdu2LQtC4nLzHlKSMe/rNA9y98AnciQQ62sOoBOgYaGvpESJOK3BmjaeA8UjpX72DRShB7iv0ytQRU4HH3/88VklhH7RarWyNTqlDdxoN/XOPJEDetB1nHVoyN8pQeqWQVl4lQP0zSk75OgyAFBYXrsPKs2rgQAqeHgAnT4kQaAfsGGh095PPfWUpHzM0ceMW1/PA0Xn1T1IMoGW88QGKDooQU+oQS9LCSBs5ulUIn9fe+211TGSU3i2U5XMFR5+QI+dOuwHnU5H27dvz/TL5xfAnMnc6DQ48nMqlTGIjLw2J+MB3fC+4P4+R9M22lXarueqq66qjjEfots+h9IO77MTTjhh1lR0eFCBQCAQaCSGeglQDw0NrZPUv2l28OPIbre7fP+XzYyQZ4WQ5+DRt0xDnhlCRweLWcmzpw9UIBAIBAL/VwiKLxAIBAKNRHygAoFAINBIxAcqEAgEAo1EfKACgUAg0EjEByoQCAQCjUR8oAKBQCDQSMQHKhAIBAKNRHygAoFAINBIxAcqEAgEAo3E/wPeGdjlXZYRuwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 2/100, d_loss=-0.093, g_loss=0.364                                                                                                                      \n",
      "epoch = 3/100, d_loss=-0.019, g_loss=0.315                                                                                                                      \n",
      "epoch = 4/100, d_loss=-0.008, g_loss=0.214                                                                                                                      \n",
      "epoch = 5/100, d_loss=-0.022, g_loss=0.124                                                                                                                      \n",
      "epoch = 6/100, d_loss=-0.002, g_loss=0.102                                                                                                                      \n",
      "epoch = 7/100, d_loss=-0.000, g_loss=0.034                                                                                                                       \n",
      "epoch = 8/100, d_loss=-0.004, g_loss=0.012                                                                                                                       \n",
      "epoch = 9/100, d_loss=-0.007, g_loss=0.004                                                                                                                       \n",
      "epoch = 10/100, d_loss=-0.010, g_loss=0.012                                                                                                                       \n",
      "epoch = 11/100, d_loss=-0.012, g_loss=0.016                                                                                                                       \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXm4fdX8x1/nfodUROWbBs2TFAkR5RcNKLNISpOhRGZNIkRPlNJMkQxliAZJEU+aJ4VCIqWkNE8qDbr390fea3/2ufuee/Y5+5y7ztf79Tw939Na566z9tpr77U+w/p8WhMTExhjjDG5MTbTHTDGGGOq8AJljDEmS7xAGWOMyRIvUMYYY7LEC5Qxxpgs8QJljDEmS7xAGWOMyRIvUMYYY7LEC5QxxpgsmV3ny61Wa2JsbIzx8fFB9QeAOXPmpM//+c9/AMgt4sXExESr3zaGNZ650Go9MWTxXrZaLSYmJjyezXPnxMTEvH4a8HiW6Hs8ofsx1bMyNvaEDPH4449PqltggQVS2TOf+UwAbrvtNgAefPDBVJfr/evmma+1QI2NjbHwwgvz0EMPpTJdvAZtio6kz7NmzQKqB1z/LrHEEqnuzjvvBIqFqurvYvu6oSrT/8e+VvVN34vfmar9pm742NgYCy20UGk8qxZilVX1R+NZ1e+qe9OprW7GoFNbVWWxbu7cuQA89thjqWz27Nk8+uijk665F3odz0jV/Oz0d+3zp+546vfib8b29bd15ud/v3fjpAuoSafnPdLvnIpjoO91ek90aqvqeY9lne5X+3fafrPv8dTvTjWmcRy0Sdcz88ADD5TaAFhhhRVS2UEHHQTAwQcfDMAll1yS6h5++OFSH6Z7h3Z65tv7EPvf6f60/23V81VFrQVqfHycBx54YNqb2t65WKeOxbL2v40S1COPPDJlf6p+s/0B6nYgOj14032vV8bHx3nwwQe7lg6rvtfpRdrp77q9tl7bUlms00LUPoGbko6bHM9ObXQ7dt3cm/idqjHr1P4w5udUz3sVvfa7apy0IZ2u/fayqt/r1IfpxqtpzU2nMY190Xtv9uwnXtFV8+SWW25JZYsuuigAV111FQD//ve/K9ttp5sx7fW9U+dvp8I2KGOMMVniBcoYY0yW1FLxQT2Rt1uRTyy88MJAoUcF2HrrrYHJetT5hdycPwZJv+J+r78xzL/P/ffqknv/eqWTzXzQtI+p+rLkkkumst122w2AQw89FIB//etfqa7KZnXDDTcAsPTSSwNwxx13NNzrmcESlDHGmCypLUENAu0gnvOc5wCw4oorTqozebDQQgulz9ETqRvml914dOJZfPHFAXjVq14FwK233prq5BQiQzfA+eefD8y/GoFBUuV5JymiyqkiV6LkA4WL+NFHH53KJE3ts88+k/6+6p2oNo4//ngA3vSmN6W6v/71r332eOawBGWMMSZLvEAZY4zJkixUfBLZb7zxibNwxxxzTKqL/vxm+Oi0+h577AHA2972tlT3kY98BICzzjqr5/ZHUe23zTbbpM8HHnggUKiYnvzkJ6c6qfG++tWvprKzzz57GF0ceZ70pCcB5bF+4xvfCMAqq6ySynSQ//Wvfz0A99xzT1ftN+2cU4fx8fHSQdcNNtgAKB+8ve+++4Dq95/G5qijjkpl6623HlCon3VwF+ANb3hDQz0fPpagjDHGZEltCarJk//t/POf/wTKxsL5nW6cQAYx3trBxd/X7n/bbbdNZZKcllpqKaAc2ePLX/4yAOuvv34qu/fee6f8zarIIqOE+v/b3/42lenaq07ry9nnV7/6VSqbyZ37KCAHgt///vdA2WFKTifRSWWZZZYB4KUvfSkAP/3pT4fSz15ptVolpxkonI0uvvjiVHbCCScA1S7lH//4x4GyI4QkeH1fESWaQK7rAJtvvjkA//jHP1LZL3/5y1IfmsQSlDHGmCxp1dnNtlqt7Le+7a6og9qtNxV9u4m+1EGHoU888UQAnv/856c67dLkOg2TA3rGXZKCvq688sqpTFJwXUZ1PDPmiomJiRf208CwxjNK8Z/97GcB2GuvvYCyi76kzxhs+IADDgBg3333LX1nAPQ9nlA9prIpRXQdet5i5PJrr70WKFzL4/el4VhppZVSnSKc99BXAE4++eRU9rrXvQ4o28bOPPNMAHbddVeAUvBnRVWP90x088xbgjLGGJMlXqCMMcZkSVZOEp2Ibpniuc99LgBHHnlkKlt22WWBIuLBKaeckuqOPfZYAH7961+nspk2Wg9jPGVUBfjc5z4HFMZU5ZuB6nQYcpWWiiGK6hq7blV8UhO25wtq0rg6U/OzivaIAZGZnnc58b73vS993n333YFinkX13/333w/A3nvvncrk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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 12/100, d_loss=-0.016, g_loss=0.022                                                                                                                       \n",
      "epoch = 13/100, d_loss=-0.012, g_loss=0.012                                                                                                                       \n",
      "epoch = 14/100, d_loss=-0.011, g_loss=0.013                                                                                                                       \n",
      "epoch = 15/100, d_loss=-0.013, g_loss=0.015                                                                                                                       \n",
      "epoch = 16/100, d_loss=-0.014, g_loss=0.015                                                                                                                       \n",
      "epoch = 17/100, d_loss=-0.016, g_loss=0.017                                                                                                                       \n",
      "epoch = 18/100, d_loss=-0.016, g_loss=0.018                                                                                                                       \n",
      "epoch = 19/100, d_loss=-0.013, g_loss=0.013                                                                                                                       \n",
      "epoch = 20/100, d_loss=-0.016, g_loss=0.013                                                                                                                       \n",
      "epoch = 21/100, d_loss=-0.015, g_loss=0.016                                                                                                                       \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 22/100, d_loss=-0.013, g_loss=0.010                                                                                                                       \n",
      "epoch = 23/100, d_loss=-0.011, g_loss=0.009                                                                                                                       \n",
      "epoch = 24/100, d_loss=-0.013, g_loss=0.002                                                                                                                       \n",
      "epoch = 25/100, d_loss=-0.014, g_loss=0.007                                                                                                                       \n",
      "epoch = 26/100, d_loss=-0.019, g_loss=0.013                                                                                                                       \n",
      "epoch = 27/100, d_loss=-0.011, g_loss=0.001                                                                                                                       \n",
      "epoch = 28/100, d_loss=-0.015, g_loss=0.014                                                                                                                       \n",
      "epoch = 29/100, d_loss=-0.018, g_loss=0.014                                                                                                                       \n",
      "epoch = 30/100, d_loss=-0.014, g_loss=0.012                                                                                                                       \n",
      "epoch = 31/100, d_loss=-0.016, g_loss=0.010                                                                                                                       \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnWWcXNXdx7+7BHcIDsXd3V0S3Ipb+eBQipa2QKFICQ0QCnwIpbi0ULRAoWixBHd3dw9JcDLPC57fuf/ZTJadHdkzu7/vm9ycM3vvnTPn3nP+3lYqlTDGGGNyo72nb8AYY4yphBcoY4wxWeIFyhhjTJZ4gTLGGJMlXqCMMcZkiRcoY4wxWeIFyhhjTJZ4gTLGGJMlXqCMMcZkSb9qPtzW1lZqa2ujHtkn2tvHXhvHjBlT83kbTXt7O2PGjKFUKrXVeq56jufPXGecfbVcW+edaqqpUttEE00EwNdffw3AiBEjunSteo2nfh/DJ6VSabpaTtDe3j7WePa1zDPjjTceAD/++GPN4wk/zdGab6o4VzqeYIIJAPj222/rdfqG05VnvtoFiokmmqhsEKp9GfTr99MlJ5544tSmSf/VV19165yNJi6mk002GaNGjarLedva2ujXrx8//PBDamvEC0CLBsCPP/5Ydp1qrx0fCp137bXXTm0LLrggAM888wwAN954Y+r7/vvvu3yd7tDe3s5kk02W5hGUf78+xpu1nqC9vZ0pppgibTageAH25oUqzvHJJ58cgC+++KLm8RQdn/nuMv7446fj2WabDYDXXnsNyO8d2l2qWqBKpRLffPNNTZNTP8zIkSO7fY5mE3/s0aNH1+3HL5VK6aXdSLQoQfHwaWdY7fXjb69x2G+//VLbTDPNBMCRRx4JwHfffdeNO+4eY8aMqdvmwfw0b6IEDL17YRLxOzZiPtVr0xSf3ddffx3oPQuTsA3KGGNMlniBMsYYkyVVqfigb4j4nRHVZa1CtKHdfffdQOHYcMUVV6S+4447Dui6Wm7SSScFYJFFFkltmh/R9tRMepuKo6fp6+OZsw0zvotb8b3UFSxBGWOMyZKqJSjTesw666zpeIkllgCKnfGBBx6Y+oYNGwbArbfemto6k5g/++wzAIYMGZLann32WYAyzy/Te5AXrpxsoGddm6Ud6OuSXleQg1QracEsQRljjMkSL1DGGGOyxCq+PsCGG26YjhVxLjE/quKmnnpqoFx90xUj8V/+8pd0PPPMMwNFEGEz4rxM89B86AnnAamoNthgg9R25plnArDzzjsDcO+996a+VlJl/RzxmdT36kytGT+/5JJLArD00ksDcN1116W+Dz74oK73WW8sQRljjMmSLCWouPornc500/2UBktGWoC55poLoCy1jYymw4cPB/J2v+zXrx/9+/dPOxyAW265BaiP0Vc7zpVWWim1dUxxNOGEE6a+k046CYDDDjsste29994APPTQQ+O8TtyprrHGGgC89NJLADz88MMVP2dMV4hph6QJuOqqq1Kb3hUKa/j3v/+d+vbaay+g/P3Qaiy22GIA/OMf/0htehb33Xff1Kb3xfrrrw/A8ccfn/pmn312oHjm9X+Aww8/vBG3XTcsQRljjMmSLCQoST1yV446Zq322ilF6aoS2qV/+OGHACy33HKp7+23367THdeHSSedlGWWWYb9998/tT3//PMAvPHGGzWfX9LM4osvntpGjx4NFLkQY9LeGWaYAYBZZpkltd1+++0ALLTQQgC88847Y11nwIAB6fi0004DiizmG2+8cep77rnngL4jSbWiW29uVErc+vLLL6e2b775BoD55psPgG222Sb1rb766mV98fOtguxG888/f2qbe+65gUK6gsL2279/f6Bc06T5p39jGEnuWIIyxhiTJV6gjDHGZEmPqfgmmWSSdCy3xxVWWAEoHAWgcIOUai+6t0oNFsVfibiqjxJdoHfaaScgH8eJH374gY8//pi77rortc0444xA9Sq+mG9vn332AeDQQw8FYNNNN0197777LlCoTnbZZZfUd/DBB5fdAxTjvt122wHlWSPkYDF48ODUpvx8k002GQAPPPBA6lONqC233DK1vf/++9mrwDRWUpWq5hUU6hb9G1XKmuNy34diru+xxx5Ac8uR1INmqy2jqur+++8HYKmllkptepY114855pjUp9IvsRzMKaec0ribrSMa50022aTs/1CMibLCQPF76D0Q33F6huVIEQuM5o4lKGOMMVnSVs1OqB7lihXAedFFF6U2OUWcd955APzhD39IfdVWYZ1mmmmAYrf14IMPpj4F89WDepYor/Tdqt2hPvLII+lYbuuvvPIKUJ5tvLPAWUlEW2yxRWrTOMrBJO7M9Plzzz03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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 32/100, d_loss=-0.013, g_loss=0.012                                                                                                                       \n",
      "epoch = 33/100, d_loss=-0.017, g_loss=0.016                                                                                                                       \n",
      "epoch = 34/100, d_loss=-0.012, g_loss=0.003                                                                                                                       \n",
      "epoch = 35/100, d_loss=-0.015, g_loss=0.008                                                                                                                       \n",
      "epoch = 36/100, d_loss=-0.014, g_loss=0.007                                                                                                                       \n",
      "epoch = 37/100, d_loss=-0.017, g_loss=0.017                                                                                                                       \n",
      "epoch = 38/100, d_loss=-0.015, g_loss=0.012                                                                                                                       \n",
      "epoch = 39/100, d_loss=-0.010, g_loss=0.008                                                                                                                       \n",
      "epoch = 40/100, d_loss=-0.008, g_loss=0.004                                                                                                                       \n",
      "epoch = 41/100, d_loss=-0.005, g_loss=0.004                                                                                                                       \n"
     ]
    },
    {
     "data": {
      "image/png": "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jMkSL1DGGGOyxAuUMcaYLPECZYwxJku8QBljjMkSL1DGGGOyxAuUMcaYLPECZYwxJku8QBljjMkSL1DGGGOyxAuUMcaYLPECZYwxJku8QBljjMkSL1DGGGOyxAuUMcaYLPECZYwxJku8QBljjMkSL1DGGGOyxAuUMcaYLBmjM29uaWmptLS0UKlU6nU9TUOlUmnp7me0tLR4IP/H6DaeLS2/ft3W1hH3iOoDGD58eOl9v/zyS7vv1+vhw4d/WqlU+nbzGptmPHuAbo8neEwjHbnnO7VA/e9Du3Y1DSLevLW4di/QpjtoPurfSSedNPV99913AMw666yp7bnnngNgzDHHBGDYsGGpT20//fRTahtjjF9v6eHDh79V84sfvRltxrO9zVBPYxefMcaYLPECZYwxJks67eLLnbHGGguASSaZBICPP/449XXVNRfdhOOOOy7ff/99N67QjM785je/AWChhRYCYLzxxkt9mmePPPJIatOc/eGHH0rvAfjxxx9H+PxqbWb0pu15p+YgFPNrggkmSG1ff/01UMy5RmILyhhjTJZ02oKKOzhorGhCB8JbbLFFajv55JMBkpWzwAILpL4PPvigS39Hh9EA0003HW+++WaXPseMnsiqB7jpppsAWGSRRQD45JNPUt/gwYMBuPfee1Nb2/vLAp3ukdPzq5706dMnvR5//PEBWHrppQFYddVVU99kk00GlJ+T11xzDQAnnHACUFhUjcAWlDHGmCzxAmWMMSZLmjoOatpppwXggAMOSG0yZ8cZZxwAllhiidQn07WzxNiTl156qUufYUYPogtpwgknBODUU09NbSussAJQHFjHw+mNNtoIgFNOOSW1xRgn031yen7Vk/g99Uxca621ABgwYEDqk0hHojKAueaaC4BXXnkFgIsvvrjq5/YEtqCMMcZkSZYy83jAp9dzzz03ANtuu23qW3fddQHo27fIQCJrR//q/wN47LHHAPjyyy9T28QTTwwUO9r33nsv9VXbLfSWTBLVMhnssssuQDmTgcZHYxbHZ7/99gNGn12p5mIcn+mnnx6AXXfdFYB55plnhPfL0ocRx0qpjKCwuDbbbLPUdu655wLw888/A+Xo/hwi/WuNPB8zzDADAF988UXq0y5fO3vonWNQa2SF33333QB89NFHqe/GG28Eyp6m119/HYA77rijpy5xpNiCMsYY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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 42/100, d_loss=-0.014, g_loss=0.014                                                                                                                       \n",
      "epoch = 43/100, d_loss=-0.012, g_loss=0.010                                                                                                                       \n",
      "epoch = 44/100, d_loss=-0.014, g_loss=0.013                                                                                                                       \n",
      "epoch = 45/100, d_loss=-0.009, g_loss=0.002                                                                                                                       \n",
      "epoch = 46/100, d_loss=-0.005, g_loss=-0.004                                                                                                                      \n",
      "epoch = 47/100, d_loss=-0.011, g_loss=0.007                                                                                                                       \n",
      "epoch = 48/100, d_loss=-0.008, g_loss=0.005                                                                                                                       \n",
      "epoch = 49/100, d_loss=-0.015, g_loss=0.012                                                                                                                       \n",
      "epoch = 50/100, d_loss=-0.008, g_loss=0.003                                                                                                                       \n",
      "epoch = 51/100, d_loss=-0.010, g_loss=0.008                                                                                                                       \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 52/100, d_loss=-0.011, g_loss=0.013                                                                                                                       \n",
      "epoch = 53/100, d_loss=-0.012, g_loss=0.010                                                                                                                       \n",
      "epoch = 54/100, d_loss=-0.008, g_loss=0.001                                                                                                                       \n",
      "epoch = 55/100, d_loss=-0.008, g_loss=0.008                                                                                                                       \n",
      "epoch = 56/100, d_loss=-0.009, g_loss=0.001                                                                                                                       \n",
      "epoch = 57/100, d_loss=-0.009, g_loss=0.002                                                                                                                       \n",
      "epoch = 58/100, d_loss=-0.007, g_loss=-0.003                                                                                                                      \n",
      "epoch = 59/100, d_loss=-0.012, g_loss=0.009                                                                                                                       \n",
      "epoch = 60/100, d_loss=-0.011, g_loss=0.002                                                                                                                       \n",
      "epoch = 61/100, d_loss=-0.009, g_loss=0.003                                                                                                                       \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnWeUXMXRhp9F5JxBJJGjQGByztkkg0kCkw0cgojCGPsjB4ksYYLhGBASGBOEhUnCBoHJmGRERiaDAJFz0n4/OG/furvDsrO7M9uzep8/mtM9ununp+90V/VbVU3Nzc0YY4wxuTFZd9+AMcYYUwkvUMYYY7LEC5Qxxpgs8QJljDEmS7xAGWOMyRIvUMYYY7LEC5Qxxpgs8QJljDEmS7xAGWOMyZLJq3lzU1NTVWknmpqaSv/G1z/88EM1l8qO5ubmpp9/V9s0NTU1NzU14WweXTeeXXEvjcK0004LwFRTTZXavvvuOwA+//zzCc3NzXN05vqT2nj+DJ0eT/CYRtrzzFe1QAFMPvnkfP/9922+R4vQ5JP/ePmpp5469fXq1QuAjz/+uNo/3S70txvhR7+pqYmpp56ar7/+OrXpvuOi3rItfrbJJvvRCJ44cWLN77cRaM/8bGT0fQP07dsXgD59+qS2999/H4AxY8a81hV/r1evXp3aTDbS8/gzdMl4Qn3mqH5noTAGKn0XlYwIzbEcnqOqF6j23LQGYKaZZgKKnR7AlFNOCdRugWqkB6G5ubm0OLXs62jbpEwOD1UtiRuR9dZbD4BPPvkktc0+++wAjBkzpkv+Xmc9HZ6franHHK30vbX1+xH7ctrs+gzKGGNMlniBMsYYkyVVu/jawyyzzALA6NGjgbJ/U24J8yPxTAGqd6nYhTLpssgiiwCw0UYbpbZbbrmlu27HmC7HFpQxxpgsqdqCao8s+osvvgBgoYUWAuA///lP6vvyyy8rXhNg1llnBWDEiBGpT3/r7rvvBuDxxx9PfV999VXpXyistwkTJgAwduzY1JejtH3ixInttoJaWlv6/6b7kWJ17bXXTm1Sr8qTAJ2fg9Ebsc466wBlEVJUb5mew3TTTZde6zv+7LPPUltP9aTYgjLGGJMlXqCMMcZkSdUuvvaYkt9++y1QuNdeeeWV1DfFFFMARbwGFO67RRddFKjspthss81+8l4q3dN7770HlIMYc3TxVWOa252XL3JPDxkyJLXNPPPMAJx00kmp7fLLLweK77La73TuuedOr+Xafvjhh1Pb4YcfXtX1uoMeFLxbczRW8Xfstdd+jBmudvz0u5rj7+BPYQvKGGNMltREZi4Uzf7hhx+mtmOPPRaAPffcM7X17t0bKCKsR44cmfqWXHJJoDgIlggCirQu00wzTWqThXbvvfeWrmlMVyHLCApPwMorr9yq79VXXwUoZQvZZpttANh0000BuOaaa1KfPAltEa+17777AvDmm2+mttx2x9NPPz1Q9oAcddRRAJx55pkA3HPPPanv888/B4qcgrl9nloSBTBCwqj4GxpFYdXQiGNpC8oYY0yWNFXjx6w2E698nsrJB9CvXz8Arr322tQ2wwwzALDzzjsDMGrUqEp/G/h5n/0yyywDFAHBV111Ver79NNPq7n9Nsk5+7aszAUWWACAt956K/UpF6Isy48++ij1addaiUpJJds6A6yWnMdTn/mAAw4A4LTTTkt9mo+az4MHD059r7/+OlCWCF988cUAbLnllgC8/fbbqU/PRlvfQ1v3F2lubn6subl5paou1Pq6HRrP2WabLb1+8sknAZhnnnlSW8sExzH0RNbBHXfcAZTH55JLLgHgjTfeSG3VjlUn6PR4QttjGsNINDY/8d129jbi/dT0+m3RnmfeFpQxxpgs8QJljDEmS2rq4quE3E9y50Ehk33iiSeAzpmYcie+/PLLpWsCbLLJJh2+bktydkn1798fgOOPPx4oshwAzDjjjEAhw4+1uu666y6gcEPF/p122gmAhRdeOPVJ3LLXXnultqeeeqpD95zLeMotLbczwNChQwHYfvvtgcJNCvDBBx8AsOCCCwKVD7Bj2MQ777wDFOKKKHpoy8XdAeru4ttuu+2AwhUHhWgkjoHcV3rOoxtPLic9x3F+yhUoIQXA6aefXvqbNQzFqLmLr17EApeqKabsPwDPP/98Xe7DLj5jjDENS01l5pVQocKLLrqoJtfXLks7t+WXX74mfyc3opUk6/G5554DCgk0FDt8WULRGpAlJGspXle7rkqFzY477rjUtssuuwCNKWkFmGOOH6t6r7jiiqlNu0uFMMTD7CuuuAJoW/obd6yymDSO8XuTqKJRGTBgAFC2PmU5xTHT3JAMX+MKRcBzvIbQXI19p556KgCPPPII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69evHwDXXHNNapO75r333gPghx9+6NL7sHuv8dEc6dWrFwAHH3xw6tt6660BGDNmTGq76KKLAPjggw+A8vlUR+eDzro8n4z5aWxBGWOMyZLsLajJJ//xFk844QSgvNudeuqpATj11FNTm3bF99xzDwC//e1vU98333wDwOeff57a4mszaSCrpZIV89133wEw++yzp7bVV18dgFtuuQUoiyqqtdAXXHBBAK688koAdtxxx9T37rvvVnUtY2pBTta9LShjjDFZ4gXKGGNMljRVY8Z1R5BZ3759AXjggQcAmH766eP9/OT/00H2+++/n9rkjnnttSKkYc011wSqN2cdqNu1dOd4ylUMsNZaawHw1VdfpbZHH30UgG+//bbV/5VLub2uvjnm+DHWc6mllipdu+Xf7AIea25uXqkzF/D8LNHp8YR8x3SGGWZIrxdZZBEAxo4dC8D3339fk7/ZnmfeFpQxxpgsyVIkEQ+hjzrqKACmmWaaVu+rtKPV/5V1NeOMM6Y+tcUDcMnW77///s7ednbo82pHBIUI4J133gEqj+GkxpRTTpleDx48GIDevXuntrXXXhuAcePGAeW5uP766wOwwAILADBs2LDU98UXX7T6W7Loo2VvqmPmmWdOr5dYYgmgsER7QIqqujLFFFMA0L9//9S2//77A4XX6pRTTkl9+t2oF7agjDHGZEmWFtQee+yRXu+0005AZV//DTfcAJRXePVvsMEGAJx++umpT+dXuhbAwIEDAdhmm2267gN0M/p85557LgDbbbdd6pM/+a677gLgkksuSX3PPPMMUD7n006/J+5MNU5Dhw5NbcsuuyxQtuJ33nlnAD766CMAdtttt9Q311xzAcVONO4wb7rpplrc9iSLxnjkyJGpbdVVVwUKS/bhhx+u/401MIstthhQ/s2VVbrooosCsM4666S+1VZbDajsHagFtqCMMcZkiRcoY4wxWZKFi0+H1CeffDIABx54YOqTWS8XU5SIK6vEhx9+2OqaL730EgArrVQoQ+WaifJ09evvSETQyOyyyy4AbLvttkB5fGaaaSYAttxySwCWX3751PfWW28B5UPoww47DIAnnngCyCO6vKuQoGGHHXZIbZpn0cW3/fbbA/D1118D8OSTT6a+Rx55BChcJAsttFAN77jx0LMW3eoaW7mbK7mPp5tuOgDmn3/+1Hb88ccD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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 62/100, d_loss=-0.011, g_loss=0.009                                                                                                                       \n",
      "epoch = 63/100, d_loss=-0.011, g_loss=0.009                                                                                                                       \n",
      "epoch = 64/100, d_loss=-0.009, g_loss=0.005                                                                                                                       \n",
      "epoch = 65/100, d_loss=-0.008, g_loss=0.009                                                                                                                       \n",
      "epoch = 66/100, d_loss=-0.006, g_loss=0.008                                                                                                                       \n",
      "epoch = 67/100, d_loss=-0.011, g_loss=0.008                                                                                                                       \n",
      "epoch = 68/100, d_loss=-0.008, g_loss=0.003                                                                                                                       \n",
      "epoch = 69/100, d_loss=-0.017, g_loss=0.014                                                                                                                       \n",
      "epoch = 70/100, d_loss=-0.009, g_loss=0.008                                                                                                                       \n",
      "epoch = 71/100, d_loss=-0.014, g_loss=0.019                                                                                                                       \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 72/100, d_loss=-0.006, g_loss=0.005                                                                                                                       \n",
      "epoch = 73/100, d_loss=-0.013, g_loss=0.022                                                                                                                       \n",
      "epoch = 74/100, d_loss=-0.002, g_loss=0.020                                                                                                                       \n",
      "epoch = 75/100, d_loss=-0.001, g_loss=0.029                                                                                                                       \n",
      "epoch = 76/100, d_loss=-0.001, g_loss=0.038                                                                                                                       \n",
      "epoch = 77/100, d_loss=-0.008, g_loss=0.034                                                                                                                       \n",
      "epoch = 78/100, d_loss=-0.007, g_loss=0.034                                                                                                                       \n",
      "epoch = 79/100, d_loss=0.013, g_loss=0.039                                                                                                                        \n",
      "epoch = 80/100, d_loss=0.003, g_loss=0.035                                                                                                                        \n",
      "epoch = 81/100, d_loss=0.012, g_loss=0.028                                                                                                                        \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnWeUXMXVRfeQQYDJIHISIpsgLHJOEiYZMEEgkgwyYDIsbLA/ggwmB4MAYXK0gUWwySByRmSREUgi55xhvh/2qXd7pjX0zHSoHp29ltY8VfW8qa6u11X31rm3WlpbWzHGGGNyY5JGN8AYY4wphycoY4wxWeIJyhhjTJZ4gjLGGJMlnqCMMcZkiScoY4wxWeIJyhhjTJZ4gjLGGJMlnqCMMcZkyWSdeXFLS4vTTvyP1tbWlu7ew/1ZUK3+bGlpwdlRAPigtbV11u7cwOOzhG73J7hPI5U88522oCabrHROa2lpoaWlhUknnTT9M5Xj/qoeLS0t7cbnRMzYatykWuNT3xPxX1fvUU/Cd1pV+lP3NJXR6af5hx9+KPm/Vqs//vhjdVo0keF+qx6tra18//33jW5Gj6Ja47MaVm0jLONaPJ9+5ivHe1DGGGOyxBOUMcaYLLHD3hhjAnGfS3uadh03BltQxhhjssQWlDGdZKqppkrXffv2BeCpp55qVHOanmixNDJEoF+/fgAstNBCqWyWWWYB4IwzzmhIm6rJJJP81x6JfZx7SIYtKGOMMVniCcoYY0yW2MVnTIUowHLw4MGpbNCgQQAMGDAAgK+++qr+DWtS5NpbY401Utn9998P1E+UMM0006TrffbZB4Bpp502lZ1wwgl1aUc9kOBjzjnnTGVffvklAO+//35D2vRz2IIyxhiTJU1jQWm1NdNMM6Wy5ZdfHoB33nknlX3yyScAjBs3ro6tMz0ZbS73798fgD//+c+pTpvor7zySru622+/HYCxY6uWJadHscQSSwCw8cYbp7J77rmnrm1YfPHF0/UDDzwAwK9+9atUdtRRRwGw9tpr17VdtUBj9d57701lshYffvjhVHbzzTcDMHz4cAC+++67ejWxHbagjDHGZElLZ2SG9crEGxN+TjHFFEAh7R05cmSqU9vnnXfeVKY9gN122w2Am266qSZtnFiymWvfZf755wdgxRVXTHW9e/cGoE+fPqns6quvBorPqW3uxgmRc3/uvPPOABx55JEAzDXXXPFvlrw2Pk9673fffXcqO/fccwF4+umnAXj33XdT3YcffljNZo9qbW3t150b1Ko/5QWRhTlmzJhUt+WWW9biT06Q+PlpPN9yyy2pbIYZZgBgnnnm6XZ//u/vNeyZX2aZZYBSK1Xfl3qfUHgMzjvvPACGDh1ak/bUJJu5McYYUw88QRljjMmSLEQScuntuuuuALz11lupbvz48QDMN998QCGCgMJ9t+2226Yyve6SSy4B4NRTT0112vDMPXq62shkB/jpp5+AwrURZbYHHnggACuttFIqW3nllQHo1atXRX9rhx12AIqN7zvuuKOrzW4o6guAo48+GijcnZVG4qvf4wZ728326AKVwOK4447rarOzJZ6BdNBBBwEw+eSTA3DxxRd3+b4ax9NNNx1QjG+AL7744md/P35+b7/9NgBHHHFEKhs2bFiX25YbBx98cLsyycvVf1AcB7LpppsCcO2116Y6CSjqhS0oY4wxWZKFBbXjjjsCcPLJJwNw6623prq99toLgK+//hqAzTbbLNVp9bTqqqumMuVG0+osBlVqNdSTLCitTA844IBUJutl4YUXBkpzx33++edAYbVKehrLyqG+Lmc9xAPYtPqMYpZmQmPpmGOOSWVt+yVaPW1X6eWEDhL6AMw6639PDZ9yyinb3btZ+6wSttpqq3QtL8eVV14JwGuvvdbl+6o/H330UQBGjx6d6jbaaCOg8uddr5PQp+11szL77LMDpXJ+8eKLLwLw4IMPpjKFTOy55551aF3H2IIyxhiTJZ6gjDHGZEnDXHxycQD88Y9/BApXVHShvPfeeyVlcRNU8SiK0Ymv+/TTT4FSMzX+bk9hu+22A+Cvf/1rKouiiLZMP/30E6wr1z/qT7k/Pvroo1Qnt0B0hz3xxBMlr28GYizM6aefDpT2ofpAecu23nrrVKeofLk5o7tzySWXBIrNZoB9990XKMb/t99+m+oUG9WTuOuuu4BCbAPw5ptvAoV76bPPPuvy/c8880wA5p57bqBw7UPxGcbPpBKaaexOiBjX9MwzzwDF833ppZemOh0j8sYbb6QyxYOp/xopdLIFZYwxJksaZkHNM8886VqrSWUwjhvNmvX1M66QNtxwQ6DYdIVChq6I/dtuu63qbW80cdN9xIgRQMcCh7iCVNS+ZKVRPi4LNloUijSXHFUWEhSZAOImdzNaqXHFLAsnymk15pRTL0biS7xTDkn499hjj1QmC1Z9LKsMeuax4gsuuCBQOj6VSUJ93NlchfFeSy21VEldHOs9wRLqKjH0RkKob775BigdZ4sssghQmiFG413WaSPHpS0oY4wxWZKFzFwWlHyeMR+XZNFnnXUWALPNNluqU5Zd5YwC+PjjjwG48MILgeZc0f8cW2yxRbqWNVXufWrFNGTIkFR2xRVXlPxeDETce++9gdL9F/Xx66+/DpRmQpa12pH11mw89NBDQGl252WXXRYoVpQdWU2x7xQsHqX8WtUrA38MkWimFX+04ttmu45BuXpdfG/qv+eee65dXSXE1994441A8UxUEpw7MRA9TfoekHxcVhMUXqi4Z6VzsfTd20hsQRljjMkST1DGGGOypGG+mXigoDbbt9lmG6D0UML9998fKDJKxOMzJG+OuaLkUpCrrycSXaByKUW3h9x9iy66KFDkM4zILSP3FRRugXgv3V+uwSg6idLUnoLcIWuttVYqm2OOOYDSHJETIuY21GFwUXSivt1vv/0AePXVV7vZ4sbQ0TEq0c0p11Esk+uoq+64KIRQeIVc/3GsN5PLtNpEF7WETvpulCQfijEaRUFym+awPWILyhhjTJY0zIKKG6uDBg0CitX5//3f/6W6mWeeGSgOdjvssMNSnTbuY9Dv8ccfDxQWl1YPPQGtxOMmp1Y5WvkDjBo1CihvOclKUo6xmF1bK864OapNVAX79UQpdDni6rESy0mfTcwEL9l+vJcEAsod16x0tLqOG/SykqJwQmOvmhaO5PrR+6L+70jU0lOR4AmKPpG1FL979R2h490hL6GJLShjjDFZkoU+WCup888/Hygk4lBYR/LtxyBerVpj0K+ONdbeyv3331+rZjeMf//73+la1o4CkwGuuuqqktfH1aus1NVWWw0ovz8SM8A//vjj1Wp2j0R9u/322wNwyimnpDoFQcc+1t6Nzh7qiSy22GLpWs9rTJF1zTXXVO1vyToYOHAgUOoxUZ1SK01MxBRaGn/6LGKoyMsvv1xSB3nt3dmCMsYYkyWeoIwxxmRJFi6+tpTbVC630alN0M033zyVyYXS2QzGzYCkujFz+aGHHgp0bJZrcxQKF6iIfS1p/n/+85/uN7YHE4/HPumkk4DiIM1y2eLjZ6PM3T1ZbCJBDUD//v2B0nEW8w92hShZv+CCC4Di4MIo8MnJVVUv1Ddy4Ufk6nz22WdTmQ41PfbYY1OZrh955JGatbNSbEEZY4zJkiwtqEpZaKGFANhll11SmcQUynXWk5BV2NkVaFxVasNUP+NKXlZANQL0yh0R3+xIENGvX79UtsEGGwAw44wzAuXP4ornHWkzvydbUFHG3DZPX3fQmLrhhhtSmSy0KEQRCk2ZmNCzG8U6upbHac0110x1Oksv5os8+eSTa9zKyrEFZYwxJks8QRljjMmSpnbx6fgDHf0OhTtF+dOUbWJiJsZB6WgMuQs/+OCDVBcPI+wuiy++OFDq3iqX2aIZkPtIMXmHH354qptzzjlLXhNdmnLjDR06NJWNHj26pm3tycw777wArLHGGqmsbdYD5eeEnimUqhR9N0IRC6pnX1sjUGTxiUfmPPXUU/VoYkXYgjLGGJMldbGgYm6uam4OK5+ZVlYAl19+OVCan29iJ/Z/236JGcmrmbNMq7R49PROO+0ElEa5NwOyispt+EfrtC16vXLPme6hsXrUUUelMmXk0DhTZoSJnSh0evLJJ0vqosxcWXhido8cDioUtqCMMcZkSU0sKEm9daRzXGVK1lgN//D1118PwNRTT53KlGuuJ/v6o6S2b9++ALz00kuprK1MfJNNNknXsgaUs+yxxx5LdZJId1ZmHtsjuarkv/HcoGaXnGvM9u7dO5Wpr8q9t6effhqortR6Ykb9f9ppp6UynXmm87WiN6Wr47mnE59JnYLw2muvNao5HWILyhhjTJZ4gjLGGJMlNXHxSQYq+Xc8TK+aaGN0u+22S2X6WyNHjqzJ38yBmCtPmQyef/75VLbNNtsAsPrqqwNw3HHHpTrJSSVWiVHjHR3jLaI7T5+vpKpQZKMQO+64Y7pudleX3HhROt+WcePGpev111+/5m2amNDYiy5WZZHp06cPUGwhQCEAiEKgiVl6LmK+SGWlydX9bgvKGGNMltTEgrrzzjsBGDFiBFAqa2wbKNpZVlxxxXSt1fkUU0yRyj799FMg3xVBd1AuLR3GCMWqMh4S99BDDwHFJnHsH/W7DiIcM2ZMRX9b8vR4AOSCCy5Yck8oBDHKuP7qq69WdP9mIgaGC423KHNuNjl97hx00EEA7L777qlsttlmA4oxHjPNr7322gDcdNNNqawn5ugsxwwzzJCu5VUaMGAAAEceeWSq07i97LLLUllO49YWlDHGmCzxBGWMMSZLauLik0m55557Vu2eOuLgnnvuSWXKkBBjeaL52tOQ6R1jFmafffZ2r5O7Q6KHmL3j6KOPLvlZaYyIxA9LLbVUKpN7MboE1LbrrruuU/dvBuRi1eF4ULhR5SqZaaaZUp3copWIT0wpGlv77LNPKpPbOOaNk3tZr49xUNpiiPn6empslFzr1157LQDLLbdcqtN7jgeXCrk/cx2jtqCMMcZkSZbZzOMKaZ111gFg2LBh7V73ySefALDeeuulsp62MopolS75OMDFF18MFEc3Q2Fl3nrrrUDp0c3qs86ivIfDhw9PZWPHjgVKsx+PGjUKKDJV9CSxyllnnQWUWqRanUpCrywqUIxLiYagkKj3pH6phBieoD5aYIEFABg8eHCqW2GFFYAiE4ms1khc7WuM33fffQCcffbZqU6WU5RVy+ui56CnfA56/xKRRWGa+vCqq64CSr9L33vvPSDffrAFZYwxJktaOjNztrS01H2aVa4t5di76KKLUt0555wDNObMp9bW1vZnTHeSRvRnruTcn7169QKK/TUd7w5FBnityGNGeL1+4403TmW1Puo9nEs1qrW1td/PvPzn7lWT/pTVKbm+VvZQ7J3IixK/n2R96gwuKCz1OtDt/oTq9mm0SocMGQLAiSeeCJTKxvfYYw8gP+9SJc+8LShjjDFZ4gnKGGNMlmQpkohoo1MHk2lTFPKKeDY9F7mRBg4cCJRKeC+88EKgcJ9E959k5rV260UkAsg576H6avz48UBpdphVVlkFKAQmOlIHioP3nE/vv0T3p7Y+HnzwQaD4voT8XHudwRaUMcaYLMleJKEANElTY2Cq2t6IfG85b+o3I+7PqpOtSKISJJLIKIA0O5FEs2ORhDHGmKbFE5QxxpgsyV4kIbTpGw8f6+wBe7lGS1ebEAvT4JbUn/h5Q2P7YGL+HLqK+qzt52g6phZjTfeU2Adqd/jshLAFZYwxJks6a0F9AIytRUMmhCSlXZWW1mj1Ol+V7lOT/mzCFXvV+rO1tbWu47MjGvw5VKNP6/68q8/qKc2vkInumdc9a2Q1VdSfnVLxGWOMMfXCLj5jjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZ4gnKGGNMlniCMsYYkyWeoIwxxmSJJyhjjDFZMllnXtzS0tJaq4Y0G62trS3dvUdLS0trS0sLra3u1mr1ZzXa0kP4oLW1ddbu3KDS/mxpKf3opp566nQ933zzAfDdd9+lsq+//hqAzz77rF1dvM6Mbvcn5DdGJ5lkwjbKTz/9VNO/Xckz36kJyhjTNIyt9x+cfPLJAZh77rlT2ahRowB4/vnnU9k555wDwCWXXALU/ouwStS9P+vBggsuCMC4ceNS2WST/Xda+OqrrxrSpohdfMYYY7LEE5QxxpgssYvPGNMttIeq/aM33ngj1d18880AXHbZZansmmuuAeDHH3+sVxNNYNFFF03XcudNM800qez777+ve5smhC0oY4wxWdLSGQVZIxQok046KQDTTz89UDq7a9Z/77336t2spledSXmVi4Kw2ftTTDHFFOl6qaWWAuCdd95JZe+++y4AP/zwA1CqotLvfvPNN13+m1NNNRUAn3322ajW1tZ+nbpRG7ran/E9zTvvvACMHVtoDCoZc5WOT713fS/UcDx3uz+hsd+h+++/PwB9+vRJdUOHDgUaI1Sp5Jm3BWWMMSZLPEEZY4zJkixFEjHw74ADDgDgt7/9LVC6mTf77LMDcMEFF6Sygw8+GPAG7ISQ+6VJYk+yRy613XbbDYC//e1vqU5xQXLnAdx3330AnHfeee3qPvjgAwDuuuuuVFaJyyreQ8GvjSSOrffffx+o3PU2wwwzALD88ssD8Mwzz6S6L7/8EoCZZ545lc0000wAjB49Gshrg7+RxO/JO++8E4CFFloIgN69e6e63L8HbEEZY4zJkqwsKK3utSoC+Oijj4Ai+jyuDNZbbz0AVl999VT2hz/8AYBLL70UKFZwEyPaQB44cGAqW2KJJQA4/vjjgaxTy2SHxqf6DmCTTTYBYM455wRgyimnTHWyGqKIYbXVVgMKCyFKsk866SSg1INQieWR8yr4mGOOAQrPBhQiEPXniBEjUt2WW24JFOmS4vjU73366aepTPWSrp977rmpbsyYMVV6F/mjMbP99tsDcNZZZ6U6jUl9hzaTlWkLyhhjTJZkJTOXHFLBY1CskCptp1YSWjXEe33xxRdVaef/2pOtLLp///4AXHzxxQDMMcccqU79ufDCCwPwySef1KIJnSbn/hSPPvooAMstt1wq+/bbb4FinEVrRklRFSIR0XjWawDWWWcdAB555JFqNLdhMvNVV101XcuyiePsiCOOAODwww8Hinxw//ubJff6ueder9c+3HPPPZfq9DlVaT86O5m59jgBNtxwQwCGDx/e7nXKg6h90mi1a2zGvcu4p1lLLDM3xhjTtHiCMsYYkyVZiSRkikc3SWcjw/V6baj27ds31b344ovdbWK2bL755ulaAhG5OeWGgsIVtcMOOwCFCwaKjAfRxG/rcon/z3lzvpqsv/76ACy99NJA6SazNuwlfY4uO7mU4/lIcmOX+38jMqJUE42t6Er/+9//DsC6666bys4880ygkOiXe8Y1ZqNIQmNPvwftzzNaZJFF0vXrr78OwJJLLpnKosCimYhbFcOGDQNglVVWSWUSg+nnySefnOrUJ2effTZQCHSgEJ1FN+gDDzwAFAKg+P1Rb2xBGWOMyZKsLChRzXxaMQ9aT2TIkCEAnHDCCalMK0ytOOMKXqshrXLL9XWUSitwUgHT22yzTarbdtttAbj//vu7+S7yI1qKsja1Wo+58vQ6/ezVq1eq06o0yp31WehQv2hxjR8/vnpvoAFoLD355JOpTNda9UPx3lU344wztrvH008/DRSyfCgs+7nmmiuV6b5a7UdJv6wDfX5QWG/NEsgvC/vNN99MZbLW43uQpSlLS4IIgF/+8pdA0R/Rald/x/Gu8B0dYhgtriiwqAe2oIwxxmSJJyhjjDFZklUclFAcD8Bjjz0GVG6Sy1SVWfrWW2+lunjdXRoZtxNddjfccANQHO0AxSa+XAFx833TTTcF4IknngDKu/iiuT/PPPMAcPfdd5f8H4q8cmuttVYq66p7Nrc4KPUTwGmnnQYU7riY+1EuPcWhfPXVV+1+74UXXkhlysHXr99/Q2rkRoEiHqhKLu6qxEG1FSGI6CYqJ26qBGV9Oe6441KZ4qWU8USZZCaE+lH55sodX/L555+nMmX86OyRJtQ5DkrP4MorrwzAtddem+o0PuI4kVte+Qo32GCDVNf2va6wwgrpWmMuulKVmaec6EWfy9tvv13J2+gQx0EZY4xpWrISSSiqOUZD33vvvUCxalXGZyjEAFplQDH7b7311kCRmwrguuuuq0Gr60/MTKBVq6ShUMhrtSH80ksvtXt9R8SVmTbutYqKK1RtWudy6GE1UIaNSy65JJVpJfmvf/0LKM02LmtWmaLjhv+AAQMA2GyzzVJZPG4bSlf3uRI/32mnnRYoThIAeO2117p0X8meZf0AvPrqq0CpeKQt0cIfPHgwUCo9F7LyYsaFtmETuaLnbMUVVwRKhUvKllEua4nEIrKkyvHKK690+LcVsqJwlfh9Iw+AxnatsQVljDEmS7KwoLQ6uOiiiwBYbLHFUp32VuSvjquGcqshyai1gmjWwLyO+Pjjj9P1jjvuCJT66uVzroZlo3tovyl+Nm0l1tX6m/VCllHc85SVHeXiGlPKVxZ9+lq5ai8p+vJjTjohObD2Qw866KBUl2Pftba2lrRL7Vf4AXTdKtG9nn322U79XrSItP8lz0o8CUGUCwvInbZy+xiCIKs7BjFfeOGFQMeWU6U8/PDDQGHFxc9fQb8xcLiWuftsQRljjMkST1DGGGOypGEuvmhq77XXXkAh1Y0b8bpu+zMS3X5yx/zlL38BSsUDPYWYC06ZMmoVGa/NZ4lNYv8feeSRQJ6uqY7Q5rnGW8xbJtdVHJ+Sjp966qklr4HC1SFXX3S7yC0TJcISWMitfdttt3X37dSUtp+tnq9Ro0ZN8DW1RkINKLJS6DONz4Ha1Tb/YTPQ9rDLKPWWi3/kyJGpLH4e3WW22WYr+dvx873llluA+h3JYQvKGGNMlmQhknj55ZcB+PDDD4FSC0H5o37xi1+0+z0FoMZccP/85z8BuOOOO4D6zfT1JK5oamE5KZgRik1arVrjhrOCqJuBaPlpLCnIUwHNUF6Grw141cX+P+SQQ4Ai+DH+/vXXXw8Ucl0oxqxW9c1mfYpqtjv2v4Qoem6jfPw3v/kNUJoPUhnmJfePz4Ou4z0UBhADqnNE70eBtLJqoAh3iGEzsqpk+Xfn89FBpyJ6BS677LIu37cr2IIyxhiTJVmkOtKsr6y7CrKFYrWrVX30u2o2jxLrttl5a3VmUW6peaoh9da5OTFwUqtb3V9ycyiVVHeXRvSn9oHiHtQuu+wClEqZtYLUeWIKyoVCjl5u5SrJr4JPoTivR8GPUYoePQdVoGFHvneW+LwfffTRQLH/Mcccc6S6clanLCHt98UAYln98TtgpZVWAkozrldIQ4581xhdYIEF2tVpLEF7y7Oz3wHTTTddupaVL8sz7n/p+yBaVV3FqY6MMcY0LZ6gjDHGZEkWIgmZo8oRFTdNJd+VVPemm25KdRJVlDNnm3XzubPItbTFFluksq222gqAo446CijNlSbTXO6SnXbaKdWdeOKJQGm2dPWjshcPHDiwqu1vJJJM77333qlMm8377rtvKpObZfHFF293j7aZpeO4k4skugR1LbdTdK38XObunIiZBCT1lnt06NChqe74448v+VmOmCG/d+/eQNHn0XUt0UPMzr/nnnsCRXb+mCdRwph4iKEO9tQ4roarqpaon5XlHYoDG+WuhEIopjyclb4vhUzst99+qazt9sjll1+e6urdX7agjDHGZEkWFpSYf/75gdJ8b1otaDM6ZpluhJXU0tKSlXWmtuyzzz6pTBmQJcuNm+9tN/Pj6rJcQKNWUbvuuivQHNm3O0sMRVAm/bhy1ypWFv5yyy2X6nQ+jrKgx2z7ygsXs0HLOpVnoKOs3Tlz0kknpevdd98dKIQlse8OPPBAoLDOob1waZVVVknXbQOeo+Vw9dVXA6X5C9ve69Zbb03X66yzDlCan05CLGWVVxhFrvzpT38CSo9wl5UfkxA8/vjjQGVhJ9tuu2261vdG9A7oc5SHSp9hI7AFZYwxJks8QRljjMmSLFx8Mim1yRr1/dr8VG69zmaGaNajIDpLPKJc7ji5BeQ6hfK5DIXcA9FNoNxbyszR03nzzTcBOOyww1JZJbF05eKgFOOkPoyoj5stT5zaG0U5beOTYh9IBBLdcueccw5QZPKIIolBgwYBxUGlErJA0WflnmP1fzzqXK+LLr6xY8cChZggV9SnEjwpow4UbugoPNF77Og7Tp9FdLcqzjR+TypbjA6JbaRb3xaUMcaYLMkik4Q2oZVjq2/fvqlOoghF8XeWmBGgmpH6uWWSKIcEEFH2u9ZaawGFzDZaVFpFKSodis1TZU2vFc3Qn51Fq+BnnnkmlfXp0weAF154AYBll1021VU5b2RNM0n87ne/S9fKai9RSLQKy1k9Gl96NqN0WWEPEjtUmmtymWWWAeCee+5pVxfFBBIIxEM/K6QhmSQkeIrPpDKTROuyEtTfMZxBoRAxx6a+a1deeWWgdtJyZ5IwxhjTtFRtDypm29Ux65XO8PLx6+jnOJtL2ttVTj/99HStlcChhx6ayuLKpKeh93vaaaelMl1Lvn/zzTenOlmuUdrbTMGjuSFLIh5prkBUBZ7X6hyvWnPeeeel6+dhQcmWAAAFSUlEQVSeew6Aa665Big9r0l9ED0ZktrLeo9BvxqfkrH/4x//aPe3Y3CzLAD9VC4/gFlnnRUojjCH0rHdDDz00ENVu5fGWgzc1zMf8+2dcsopQB5BzLagjDHGZIknKGOMMVnSaRdf20wKSm8/ePDgVHb22WcDlbv4JKGUqa+8b9B1F4hcCzqgDGDAgAFA6WFlw4YNA3pmhoSOkJxa7x+Kz00yYKj6ERATFRp78UgNZUQ599xzgeYNfYjPpUQI2tBXvjuANddcEyh1+8m1p2c0ZjNRXj/J/GPfaXxGt7zci++++y5QevS58szF7Qe1Q7LsWh3HkyPq5/nmmy+V6XOMrsQrr7yyvg3rAFtQxhhjsqRTFtQkk0xCr169SoK6tOF5/vnnp7KOhAfaLN1oo41SmQJ0JbONslzlmBLxOHIFqmnVBUVgm4J94+F7kvjG1w8ZMgQo8nyNGzdugm3viUSZ+RVXXAHAjTfemMqqcYR0PckpV+K6664LFCt5KPpbR8S/8cYbqa6jQNScUXvHjBkDFDkgochRGHPkSY6uvignr1f+QkmdoTiKXJm7ob2HJf5fYq2YZ07t0fdCTxZJtWXppZcGikzxUMjtzzjjjFSWk9fEFpQxxpgs8QRljDEmSzrl4vvpp5/44osvSlwQEhdU6pbQJvExxxyTyhZYYAGgMM/79++f6uQukFsuxkBokzUKHBRDpZ8XXXRRqlP0fkRxF08++SQw8bj45LqLLr6nnnoKKHWJjB49GmiezeSc3GPalI4iAKFYk3hQnDbwr7vuulR2xBFHAFXPMlE3FMcYhTc777wzUIypOAblftJWwIgRI1Ld7bffDlQunFIcT7nsEjmNk3qho2Bif0vIs/XWW6eynPJu2oIyxhiTJZ2WmbddeVSyEokztqTnMYPBlltuCRSbyVEaLhl7FGYIrSrjvZT5QKuzKCm/7777ADj22GNTmSLQu5Cbq2mIfSdJv440j0e+q69k5UIhWInZEMyEidaSxlm58S+iVb/GGmsA8Pvf/z6V6UC9nKS/XeGxxx5L13rPymggcQUUz7R+ViObwcRoLZVD34kxu7uedQl6oHyOxEZhC8oYY0yW1OU8qLh/oSOdo+99//33L3m9ziiB4kht+exjkJl8qnvssUcqayuRjKunchbX+PHjgfyPfu4KspyUuRyKHGqyVuOKX32lIF7oehb5iQ319W233ZbKZplllpI6KMasssrHvGjq/xhKEWXozczIkSPTtfqjWffVmhV9r5bLlRhDe3KwnIQtKGOMMVniCcoYY0yWZHHke9tNzJgSX1HjiryPG86dlT7r78So9njd09BxA9GF2vYICEXWQyHNV85CyCuqPEfkrjrkkEOA0swHOsIgCnV+/etfAx0fI9NT3HqRZj1WpCego3W22GILoPT7VgeR7r333vVvWAXYgjLGGJMlWVhQnaFZAkYbiVb1kovGQMXhw4eXlMXjuSU51ZHS5udR/80888xA6WGbyvc2aNCgVBYPhjOmVkRPk/KlSqCm7PNQhEK8/vrr9WtcJ7AFZYwxJks8QRljjMmSpnPxmfJEk753795AEYfz/PPPpzodpVHuMMkYf2MmTHSLKjekRCeKM4NiAzqKJIypBzr8FQq3s/KNxlg9xeXlii0oY4wxWdLSmTxVLS0t7wNja9ecpmG+1tbWWbt7E/dnwv1Zfbrdp+7PEjxGq0tF/dmpCcoYY4ypF3bxGWOMyRJPUMYYY7LEE5Qxxpgs8QRljDEmSzxBGWOMyRJPUMYYY7LEE5Qxxpgs8QRljDEmSzxBGWOMyZL/B4/xyuyol4ddAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 82/100, d_loss=0.005, g_loss=0.034                                                                                                                        \n",
      "epoch = 83/100, d_loss=0.003, g_loss=0.035                                                                                                                        \n",
      "epoch = 84/100, d_loss=0.007, g_loss=0.037                                                                                                                        \n",
      "epoch = 85/100, d_loss=0.008, g_loss=0.033                                                                                                                        \n",
      "epoch = 86/100, d_loss=0.006, g_loss=0.034                                                                                                                        \n",
      "epoch = 87/100, d_loss=0.007, g_loss=0.031                                                                                                                        \n",
      "epoch = 88/100, d_loss=0.022, g_loss=0.010                                                                                                                        \n",
      "epoch = 89/100, d_loss=0.004, g_loss=0.035                                                                                                                        \n",
      "epoch = 90/100, d_loss=0.007, g_loss=0.043                                                                                                                        \n",
      "epoch = 91/100, d_loss=0.002, g_loss=0.041                                                                                                                        \n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAADRCAYAAACZ6CZ9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnWeUHMXVhp8VAiGiEEiAyDkKDIgcTbLJmBxscrSJBzhwEMEgDMdEk6MJJuecc84ZAQIEiCiCRRAgoub7oe+tvr0ar3Z2Z3drVu/zR6Oq2Z6emu6uurfee29TpVLBGGOMyY0eXX0CxhhjTDU8QRljjMkST1DGGGOyxBOUMcaYLPEEZYwxJks8QRljjMkST1DGGGOyxBOUMcaYLPEEZYwxJkt61vLmpqamdqed6NFj3Jw4duzY9h6qS6lUKk3tPUY9xrO74PFsmaamccNTQ+aXLyuVSr92fmalqampls/szrR7PKHzrlE9ZwF69hz3mJ988skBmGqqqeL5APDf//43tf30009ATddam2jNPV/TBAUwySST8Ntvv7Xqvfry+hdgyimnBOCHH35Iba09XneklvE0Eyb38dS9EB8gQucd75dJJpmk1PbLL7+09qNGtP0sSZ856aSTVv3MiXDSavd4io64Rps/a6eYYorU17dvXwAWXHBBAFZaaaXU16tXLwAuueSS1Pbee+8BMGbMmLqeY1uoeYKqZWB1EceLeZ555gHg5ZdfrvWjuyU5P0wbkdzHUw8QeRCqTVTxfunK71OpVPj555+77PO7Kx3xmzZ/1kYDQNfcpptuCsBss82W+kaOHAnAW2+9ldp+/fXXup9fW/EelDHGmCzxBGWMMSZLanbxtYXevXun18ceeywA++yzT2p75513OuM0TAehzVeAH3/8sQvPJE/intJmm20GFPfE448/nvpGjBi3zRH3D7TBHTexjZkQUYS2xx57ALDuuusCcO2116a+E088EcjLrRexBWWMMSZLmmpR47RVIqlVIMB6660HwEMPPZTavvnmmwn+rZQocSXZxRvIE70suk+fPgDssssuqe3kk08Gag8j6M7jGWW9DzzwAACDBw8G4P777099Uuwdf/zxqe3iiy8G2iQqer5SqQyq/WwLch3PLqLd4wmdN6bTTz99ev3uu+8CxbNziSWWSH0tPXs7mtbc87agjDHGZIknKGOMMVnSKSKJuEn82muvAdVdQNWCzK644goAll12WaDY8AO46aab6n+yptV8/fXXQLHRaqoz00wzpdcKjHzkkUeA8n2g10cffXRqqyEw15jEEUcckV5PM800QPW41NyxBWWMMSZLOtSC0mrx7LPPTm1rrrkmAEOHDk1tl112GVCk4ohR0AMHDgRg0kknBWDIkCGpTxHR1113XWr7/PPPgfwzCpjujzwC//znP1ObJPn9+o1L6/bxxx+P93fffvtteq3rvg25+CZKYmaORs/32R5iaI/GQdkipp566tT33Xffld6TG7agjDHGZEmHyswPOeQQoAjO/f9jAOUZ+5NPPgFgsskmA8oWlGZ7WWPRJ682rTKhyC2lhIgffPBBLafcahpJFn3mmWem11qday8w7uN9//33nXE6VWmk8Wwts88+O1AORNf1f8011wBw/vnnpz7J9mPwrvb5WrsXJQvtxx9/nKhk5ssttxwAf/jDH1LblVdeCcDbb7+d2tphgTaUzDxaUEcddRQAV111FVA8I6GQnseci51lpVtmbowxpmHxBGWMMSZLOsTFpw3gF154AYBZZpkl9cm1F118l156KQDPPvssAPfdd1/qUyYJ5XiTKQ9w3nnnAeVIfX0fuUSUuQLKUfvtpRFcUjPOOCMAH374YWrTJrJyb912222p729/+xsAo0aNSm2q3yVGjx6dXtdTiNII4yni9TbvvPMCsOqqqwKw8MILp771118fKMvMdd3LpRJdd3LnbbTRRqmtpQwSchduscUWqe2ggw4CYNCgQQ3p4ltjjTUA+Pvf/w6Ur1256uKY7bzzzkDhTo1uar1+//33U9taa60FFOKAGmgoF19E7r5jjjkGKGeSkFgtuvj03FaIT0e5/OziM8YY07DUTWYeqzTecMMNAMwwwwxA9QqhkaWXXhoocpDFFU/zLLuxTxvNd955Z2pbZZVVSp+zww47pL56WlA5o/F+7LHHgLKIRKshta2++uqp79FHHwVg2mmnTW3auNffDR8+PPUpBCBXiWq90bV1yy23pDaJEjSerS1AqN8oWqha6a699tqp7ZVXXhnvGELHGDBgQGqTcKgR0PnH4HsFfWtc4/eOzxHRfLyjdatjKFAVYNCgcUZQzAXa3dE47LnnnkD5GpHlH8dRz1yJKbryuWkLyhhjTJZ4gjLG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1Pbiiy8CxZjVurk9oewBPXuOu0Wnm246AL744ouajp8L8Xtq/PSdllxyydS33HLLAYUn4fDDD099EjI16hiIpqamhhJBRBGXfsfO+g1sQRljjMmSTregdtxxRwD233//1LbaaqsB8P777wOF1QRwzjnnADDnnHOOdyxZCAMHDkxt2lPabbfdALjyyitbdV4//PBDq95XT8aMGcPQoUP5+uuvU9vTTz/d7uPKinz99dcBmH766cd7j1br1VZycfznmmsuoFjtRgtqsskmA7q/BbXAAgsAcOeddwLla/HHH38E4LvvvgNg++23T3133XUXULaMevfuDcA222wDwPLLL5/6tL8XrY0111wTKH7DxRZbLPU10p5FPNfnnnsOgM033xyAgw46KPVNPfXUpb+L+8UiegROPvlkAK699trxPidXcrKeJp98cqB8zS288MIAnHfeeUA54faee+4J2IIyxhgzkeMJyhhjTJY01WIS16M+jFx7gwcPTm3KmvDXv/4VgHXXXTf1XXrppUDhToqmaDVuv/12ADbeeGOg/ua0osDrUb+oR48elV69epVcZG11l2kzHWDo0KFAUXqhGhKYvP3226lN7pXo7pTcXVkjoqBDv9Obb76Z2iScqHXcc6sHFbNpKDxB7pCWavnETA6PPPIIUM7WscEGG5SOVY14DF0POp+ZZ5459cmd/T94vlKpDGrpDROio+tBKZvJhx9+mNokotI1qPCP+DqOv66z1VdfHYDHHnuso0633eMJedTYis+Kyy67DIB11lkntUkwpmtbWy9QCFrqkbGkNfe8LShjjDFZ0ukiCc3YUT76n//8ByhWizG4VivHCVlOYtZZZwU6biNyjjnmSHnp2kulUkmb7O1lq622Sq8l4a+WJVly8S233HK8PjHjjDOm1xdddBEAV1xxBVDeMNXx559//tR26KGHAl0fsNtetIEPhbBBVLsW1TbttNOmNllLE/pboWs2hlLo99G4R2us0ZGwJFpQupZ0vcX7WMKSOD6yBlZeeWWgQy2ohkDXSbXwBXmhVlpppdT3+9//Hiis2XgMIYEUFL9ZZ2ELyhhjTJZ4gjLGGJMlne7iU+636JKSWS5zXWUxoOWCgorej+ZsR5j4cUN7qaWWKsUtdTU6txNOOCG1yaTXv7GUiMa9JXFMzM+nTBPVSgLoGDE2qrl7oFGJ8Te6zmJ8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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch = 92/100, d_loss=0.011, g_loss=0.038                                                                                                                        \n",
      "epoch = 93/100, d_loss=0.009, g_loss=0.032                                                                                                                        \n",
      "epoch = 94/100, d_loss=0.014, g_loss=0.039                                                                                                                        \n",
      "epoch = 95/100, d_loss=0.013, g_loss=0.023                                                                                                                        \n",
      "epoch = 96/100, d_loss=0.007, g_loss=0.036                                                                                                                        \n",
      "epoch = 97/100, d_loss=0.016, g_loss=0.029                                                                                                                        \n",
      "epoch = 98/100, d_loss=0.010, g_loss=0.034                                                                                                                        \n",
      "epoch = 99/100, d_loss=0.002, g_loss=0.032                                                                                                                        \n",
      "epoch = 100/100, d_loss=0.014, g_loss=0.028                                                                                                                        \n",
      "epoch = 101/100, d_loss=0.015, g_loss=0.033                                                                                                                        \n"
     ]
    },
    {
     "data": {
      "image/png": "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LPEEZYwxJks8QRljjMkST1DGGGOyxBOUMcaYLPEEZYwxJks8QRljjMkST1DGGGOyxBOUMcaYLPEEZYwxJks8QRljjMmSwY28uaurq9bd3c3cuXNbdT4dQ61W6+rrMbq6umpdXV3UarVmnFJH4/FsOs/WarXhfTlAV1eXB7Kgz+MJ1c/Qrq7XL/2hQ4emtje/+c0ALLbYYgD85z//SX2zZ8/u62lkQT33fEMT1P8fdMHOxlTSyHjqQm7nb9Afn9kXOuU828CU/j6BAUbTxrNWq6X7CmDQoEEAbLLJJqlttdVWA2DPPfcEYPvtt099A2WCqge7+IwxxmSJJyhjjDFZ0rCLL0eiuTxQXDyLLLJIev3qq68Crf9uGsell146tX3iE58A4Mwzz2zLOZiFG12Db3vb2wB44oknUp+uPbnEgLSX0ynXZVdXF0OGDEl7SwDLLrssADvuuGNqW3/99QF461vfCsCcOXPaeJb5YAvKGGNMljRsQUVrJdLqFYxWTSuvvHJqO/744wFYY401Uttf/vKX0t899thj6fUf/vAHoKyW2WabbQD4/ve/D8CMGTOaeNaN0939+pph5MiRqe1f//pXyz4vWmpawe2///6pbbnllgPg3//+NwA333xz6pNlZ0yzWHHFFQEYO3YsANddd13qW2mllQBYaqmlUttRRx0FwKxZs9p1in2iq6uLRRddtPQM2njjjYFCuQfw9re/HYBXXnmlJefQ83WuymxbUMYYY7LEE5QxxpgsadjF1w5TUG4ugOHDX4+NO+WUUwDYdtttU1809YU2F+VyjKb/U089BcCll16a2k499VSg/117QuP74IMPNu2Y0Z0wePDrP7k2XbUZDXDjjTcC8POf/3ye81mYYi9M/yGX82abbQbADjvskPp0HcutB53j2hO1Wo1Zs2aVXHdPP/00UMQ+ATz//PMAfOMb3wBg5syZTTuHnXbaKb3+3//+B8BvfvObph2/mdiCMsYYkyVZycyHDBkCwOqrr57aNtpoIwD+/ve/A2VBxJve9KbS30FhOckKiyv/t7zlLUDZ8vrvf//bvC+wAPRMzdPMzA2Sst5yyy2pTeILWUa33npr6vvMZz4DdN6qNFe00h81alRqO/roowG47777+uWccued73wnAMssswxQfW+PGDGi/SfWJGq1GrNnzy7d33q2nXDCCalt8uTJQCFO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\n",
      "text/plain": [
       "<Figure size 432x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "epochs = 100\n",
    "batch_size = 64\n",
    "\n",
    "real = -np.ones(shape=(batch_size, 1))\n",
    "fake = np.ones(shape=(batch_size, 1))\n",
    "\n",
    "d_loss = []\n",
    "g_loss = []\n",
    "\n",
    "for e in range(epochs + 1):\n",
    "    for i in range(len(X_train) // batch_size):\n",
    "        for _ in range(n_critic):\n",
    "\n",
    "            # Train Discriminator weights\n",
    "            critic.trainable = True\n",
    "\n",
    "            # Real samples\n",
    "            X_batch = X_train[i*batch_size:(i+1)*batch_size]\n",
    "            d_loss_real = critic.train_on_batch(x=X_batch, y=real)\n",
    "\n",
    "            # Fake Samples\n",
    "            z = np.random.normal(loc=0, scale=1, size=(batch_size, latent_dim))\n",
    "            X_fake = generator.predict(z)\n",
    "            d_loss_fake = critic.train_on_batch(x=X_fake, y=fake)\n",
    "\n",
    "            # Discriminator loss\n",
    "            d_loss_batch = 0.5 * (d_loss_real[0] + d_loss_fake[0])\n",
    "\n",
    "            # Clip critic weights\n",
    "            for l in critic.layers:\n",
    "                weights = l.get_weights()\n",
    "                weights = [np.clip(w, -clip_value, clip_value) for w in weights]\n",
    "                l.set_weights(weights)\n",
    "\n",
    "        # Train Generator weights\n",
    "        critic.trainable = False\n",
    "        g_loss_batch = c_g.train_on_batch(x=z, y=real)\n",
    "\n",
    "        print(\n",
    "            'epoch = %d/%d, batch = %d/%d, d_loss=%.3f, g_loss=%.3f' % (e + 1, epochs, i, len(X_train) // batch_size, d_loss_batch, g_loss_batch[0]),\n",
    "            100*' ',\n",
    "            end='\\r'\n",
    "        )\n",
    "    \n",
    "    d_loss.append(d_loss_batch)\n",
    "    g_loss.append(g_loss_batch[0])\n",
    "    print('epoch = %d/%d, d_loss=%.3f, g_loss=%.3f' % (e + 1, epochs, d_loss[-1], g_loss[-1]), 100*' ')\n",
    "\n",
    "    if e % 10 == 0:\n",
    "        samples = 10\n",
    "        x_fake = generator.predict(np.random.normal(loc=0, scale=1, size=(samples, latent_dim)))\n",
    "\n",
    "        for k in range(samples):\n",
    "            plt.subplot(2, 5, k+1)\n",
    "            plt.imshow(x_fake[k].reshape(28, 28), cmap='gray')\n",
    "            plt.xticks([])\n",
    "            plt.yticks([])\n",
    "\n",
    "        plt.tight_layout()\n",
    "        plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. Evaluate model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-09-21T06:35:51.016613Z",
     "start_time": "2018-09-21T06:35:50.453311Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plotting the metrics\n",
    "plt.plot(d_loss)\n",
    "plt.plot(g_loss)\n",
    "plt.title('Model loss')\n",
    "plt.ylabel('Loss')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Discriminator', 'Adversarial'], loc='center right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## References\n",
    "\n",
    "* [GAN — Wasserstein GAN & WGAN-GP](https://medium.com/@jonathan_hui/gan-wasserstein-gan-wgan-gp-6a1a2aa1b490)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
